题目描述
AtCoder 社が開発したゲーム『スヌケトゥーン』は、プレイヤーがすぬけ君を操作して水鉄砲から飛んでくる水を回避するゲームです。
ゲームのステージは無限に続く数直線からなり、ゲーム開始時点ですぬけ君は地点 0 にいます。
ゲーム開始直後から、すぬけ君は 1 秒ごとに「 1 小さい地点に移動」「 1 大きい地点に移動」「動かない」の 3 択から行動を選べます。より厳密には、すぬけ君がゲーム開始後 t 秒 (t ≥ 0, t は整数) の時点で地点 p にいるとき、 t+1 秒の時点では地点 p−1 ・地点 p ・地点 p+1 の 3 ヵ所のいずれかに行くことができます。
すぬけ君は水鉄砲から発射された水を浴びるとダメージを受けてしまいます。水鉄砲は N 回発射されて、 i 回目の発射は Ti, Di, Xi を用いて次のように表されます。
- ゲーム開始から Ti 秒後に左右いずれかから水が発射されます。すぬけ君が Ti 秒の時点でいる地点を p としたとき、ダメージを受ける範囲および値は次の通りです。
- Di = 0 のとき、p < Xi の範囲にいると Xi − p のダメージを受ける。
- Di = 1 のとき、Xi < p の範囲にいると p − Xi のダメージを受ける。
プロゲーマーの高橋君は、攻略情報をツイートするために N 回目の水鉄砲の発射が終わった後のすぬけ君の合計ダメージを最小化することにしました。高橋君が合計ダメージを最小化するようにすぬけ君を操作したときの合計ダメージを求めてください。
输入格式
入力は以下の形式で標準入力から与えられる。
N T1 D1 X1 T2 D2 X2 ⋮ TN DN XN
输出格式
高橋君が合計ダメージを最小化するようにすぬけ君を操作したときの合計ダメージを出力せよ。
题目大意
有一个游戏,发生在一条数轴上,最初 0 时刻,Snuke 在 0 号节点。
每过一个时刻,你可以选择向正方向或负方向移动一格,或者不移动。
接下来有 n 个事件,每一个事件用 Ti,Di,Xi 描述,其中 Ti 表示事件发生时刻,假设 Snuke 此时在 p 点:
- 若 Di=0,Snuke 将会受到 max{0,Xi−p} 的伤害。
- 若 Di=1,Snuke 将会受到 max{0,p−Xi} 的伤害。
请问 n 次事件之后 Snuke 受到的伤害量的最小值。
- 1≤n≤2×105。
- 1≤T1≤T2≤⋯≤Tn≤109。
- ∀i∈[1,n],Di∈{0,1},−109≤Xi≤109。
- 所有输入均为整数。
提示
制約
- 1 ≤ N ≤ 2 × 105
- 1 ≤ T1 < T2 < … < TN ≤ 109
- Di (1 ≤ i ≤ N) は 0 または 1
- −109 ≤ Xi ≤ 109 (1 ≤ i ≤ N)
- 入力は全て整数である。
Sample Explanation 1
便宜上 t をゲーム開始から経過した秒数を表す変数とします。全ての水鉄砲の発射が終了するまでのすぬけ君の最適な動きは以下の通りです。 - t = 0 のときすぬけ君は地点 0 にいます。すぬけ君は 1 大きい地点に移動します。 - t = 1 のときすぬけ君は地点 1 にいて、 1 回目の水鉄砲の発射により 2 のダメージを受けます。すぬけ君は 1 小さい地点に移動します。 - t = 2 のときすぬけ君は地点 0 にいます。すぬけ君は移動しません。 - t = 3 のときすぬけ君は地点 0 にいて、 2 回目の水鉄砲の発射によるダメージを受けません。すぬけ君は 1 大きい地点に移動します。 - t = 4 のときすぬけ君は地点 1 にいて、 3 回目の水鉄砲の発射により 5 のダメージを受けます。 このときすぬけ君は合計で 7 のダメージを受けるので、 7 を出力します。