atcoder#ABC217H. [ABC217H] Snuketoon

[ABC217H] Snuketoon

配点 : 600600

問題文

AtCoder 社が開発したゲーム『スヌケトゥーン』は、プレイヤーがすぬけ君を操作して水鉄砲から飛んでくる水を回避するゲームです。

ゲームのステージは無限に続く数直線からなり、ゲーム開始時点ですぬけ君は地点 00 にいます。 ゲーム開始直後から、すぬけ君は 11 秒ごとに「 11 小さい地点に移動」「 11 大きい地点に移動」「動かない」の 33 択から行動を選べます。より厳密には、すぬけ君がゲーム開始後 tt(t0(t \geq 0, tt は整数)) の時点で地点 pp にいるとき、 t+1t+1 秒の時点では地点 p1p-1 ・地点 pp ・地点 p+1p+133 ヵ所のいずれかに行くことができます。

すぬけ君は水鉄砲から発射された水を浴びるとダメージを受けてしまいます。水鉄砲は NN 回発射されて、 ii 回目の発射は Ti,Di,XiT_i, D_i, X_i を用いて次のように表されます。

  • ゲーム開始から TiT_i 秒後に左右いずれかから水が発射されます。すぬけ君が TiT_i 秒の時点でいる地点を pp としたとき、ダメージを受ける範囲および値は次の通りです。 - Di=0D_i = 0 のとき、p<Xip \lt X_i の範囲にいると XipX_i - p のダメージを受ける。
    • Di=1D_i = 1 のとき、Xi<pX_i \lt p の範囲にいると pXip - X_i のダメージを受ける。

プロゲーマーの高橋君は、攻略情報をツイートするために NN 回目の水鉄砲の発射が終わった後のすぬけ君の合計ダメージを最小化することにしました。高橋君が合計ダメージを最小化するようにすぬけ君を操作したときの合計ダメージを求めてください。

制約

  • 1N2×1051 \leq N \leq 2 \times 10^5
  • 1T1<T2<<TN1091 \leq T_1 \lt T_2 \lt \dots \lt T_N \leq 10^9
  • DiD_i (1iN)(1 \leq i \leq N)00 または 11
  • 109Xi109-10^9 \leq X_i \leq 10^9 (1iN)(1 \leq i \leq N)
  • 入力は全て整数である。

入力

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

NN

T1T_1 D1D_1 X1X_1

T2T_2 D2D_2 X2X_2

\vdots

TNT_N DND_N XNX_N

出力

高橋君が合計ダメージを最小化するようにすぬけ君を操作したときの合計ダメージを出力せよ。

3
1 0 3
3 1 0
4 0 6
7

便宜上 tt をゲーム開始から経過した秒数を表す変数とします。全ての水鉄砲の発射が終了するまでのすぬけ君の最適な動きは以下の通りです。

  • t=0t = 0 のときすぬけ君は地点 00 にいます。すぬけ君は 11 大きい地点に移動します。
  • t=1t = 1 のときすぬけ君は地点 11 にいて、 11 回目の水鉄砲の発射により 22 のダメージを受けます。すぬけ君は 11 小さい地点に移動します。
  • t=2t = 2 のときすぬけ君は地点 00 にいます。すぬけ君は移動しません。
  • t=3t = 3 のときすぬけ君は地点 00 にいて、 22 回目の水鉄砲の発射によるダメージを受けません。すぬけ君は 11 大きい地点に移動します。
  • t=4t = 4 のときすぬけ君は地点 11 にいて、 33 回目の水鉄砲の発射により 55 のダメージを受けます。

このときすぬけ君は合計で 77 のダメージを受けるので、 77 を出力します。

3
1 0 1
6 1 1
8 0 -1
0
5
1 0 1000000000
2 1 -1000000000
3 0 1000000000
4 1 -1000000000
5 0 1000000000
4999999997