Official
D - Wandering Editorial by QCFium
制約が \(N \le 200000\) なので愚直にロボットをシミュレートする計算量が \(\Theta(N^2)\) の解は実行時間制限に間に合わず TLE となってしまいます。
「正の向きに \(A_1\) 進む。正の向きに \(A_2\) 進む。正の向きに \(A_3\) 進む。\(\dots\) 正の向きに \(A_i\) 進む。」という一連の動作を動作 \(i\) と呼ぶことにします。
ここで \(1 \le i \le N\) を満たす全ての整数 \(i\) について次の値は簡単に \(O(N)\) で求めることができます。(\(i\) の小さい順に求められます)
- \(p_i\) : 動作 \(i\) の合計の座標の変化
- \(q_i\) : 動作 \(i\) を座標 \(0\) で始めた場合の、開始から終了までの座標の最大値
そしてこれが求まると以下の要領で答が求まります。
- 答え (座標の最大値) を入れる変数 \(r\) を \(0\) とする。
- 今の座標 \(x\) を \(0\) として\(i = 1, 2, 3, \dots , N\)について以下を行う
- \(r\) を、\(\max(r, x + q_i)\) で置き換える
- \(x\) を \(x + p_i\) で置き換える
時間計算量は \(O(N)\) です。
posted:
last update: