atcoder#ABC261D. [ABC261D] Flipping and Bonus

[ABC261D] Flipping and Bonus

配点 : 400400

問題文

高橋君が NN 回コイントスを行います。 また、高橋君はカウンタを持っており、最初カウンタの数値は 00 です。

ii 回目のコイントスで表裏のどちらが出たかによって、次のことが起こります。

  • 表が出たとき:高橋君はカウンタの数値を 11 増やし、XiX_i 円もらう。
  • 裏が出たとき:高橋君はカウンタの数値を 00 に戻す。お金をもらうことは出来ない。

また、MM 種類の連続ボーナスがあり、ii 種類目の連続ボーナスではカウンタの数値が CiC_i になるたびに YiY_i 円もらうことができます。

高橋君は最大で何円もらうことができるかを求めてください。

制約

  • 1MN50001\leq M\leq N\leq 5000
  • 1Xi1091\leq X_i\leq 10^9
  • 1CiN1\leq C_i\leq N
  • 1Yi1091\leq Y_i\leq 10^9
  • C1,C2,,CMC_1,C_2,\ldots,C_M はすべて異なる。
  • 入力はすべて整数

入力

入力は以下の形式で標準入力から与えられる。

NN MM

X1X_1 X2X_2 \ldots XNX_N

C1C_1 Y1Y_1

C2C_2 Y2Y_2

\vdots

CMC_M YMY_M

出力

高橋君がもらうことのできる金額の最大値を整数で出力せよ。

6 3
2 7 1 8 2 8
2 10
3 1
5 5
48

順に 表, 表, 裏, 表, 表, 表 が出た時、もらえる金額は次のようになります。

  • 11 回目のコイントスで表が出る。カウンタの数値を 00 から 11 にして、22 円もらう。
  • 22 回目のコイントスで表が出る。カウンタの数値を 11 から 22 にして、77 円もらう。さらに、連続ボーナスとして 1010 円もらう。
  • 33 回目のコイントスで裏が出る。カウンタの数値を 22 から 00 にする。
  • 44 回目のコイントスで表が出る。カウンタの数値を 00 から 11 にして、88 円もらう。
  • 55 回目のコイントスで表が出る。カウンタの数値を 11 から 22 にして、22 円もらう。さらに、連続ボーナスとして 1010 円もらう。
  • 66 回目のコイントスで表が出る。カウンタの数値を 22 から 33 にして、88 円もらう。さらに、連続ボーナスとして 11 円もらう。

このとき高橋君は合計で 2+(7+10)+0+8+(2+10)+(8+1)=482+(7+10)+0+8+(2+10)+(8+1)=48 円もらうことができ、このときが最大です。 連続ボーナスはカウンタの数値が CiC_i になるたびに何度でももらえることに注意してください。 ちなみに、66 回のコイントスで全部表が出た時は 2+(7+10)+(1+1)+8+(2+5)+8=442+(7+10)+(1+1)+8+(2+5)+8=44 円しかもらうことが出来ず、この時は最大ではありません。

3 2
1000000000 1000000000 1000000000
1 1000000000
3 1000000000
5000000000

答えが 3232 bit 整数型に収まらないこともあることに注意してください。