公式
C - Basic Grid Problem with Updates 解説
by
C - Basic Grid Problem with Updates 解説
by
maspy
ヒント → https://atcoder.jp/contests/arc190/editorial/11715
問題文では「パス」は \((1,1)\) で始まり \((H,W)\) で終わるものだけを指して定義していますが,解説では任意の \(2\) 点間の「パス」や「\(f(P)\)」を同様の意味で使います.
[1] 解法
次の \(2\) つの dp テーブルを用意します.
- \(\mathrm{dp}_1[h][w]\) : \((1,1)\) から \((h,w)\) へのパス \(P\) に対する \(f(P)\) の総和.
- \(\mathrm{dp}_2[h][w]\) : \((h,w)\) から \((H,W)\) へのパス \(P\) に対する \(f(P)\) の総和.
高橋君がマス \((a,b)\) に居るとき,
- \(1\leq h\leq a\) に対する \(\mathrm{dp}_1[h][w]\)
- \(a\leq h\leq H\) に対する \(\mathrm{dp}_2[h][w]\)
が正しく計算された状態を保持するようにします.これはクエリごとに第 \(a\) 行に対する再計算を行えばよく,クエリごとに \(O(W)\) 時間で行えます.
これらの dp テーブルが保持できていれば,答の差分計算が \(O(1)\) 時間で簡単に行えます.あるいは \(a\) 行目から \(a+1\) 行目に移動する列を考えて \(\mathrm{ANS}=\sum_{w} \mathrm{dp}_1[a][w] \mathrm{dp}_2[a+1][w]\) などの計算により \(O(W)\) 時間で再計算することも可能です.
以上により本問題は \(O(HW+WQ)\) 時間で解くことができます.\(H\leq W\) ならば行・列を入れ替えて全く同じ方法をとることで,\(O(HW+\min(H,W)Q)\) 時間で本問題を解くことができます.
投稿日時:
最終更新: