知能大安売り

知識を売買 読者がバイバイ メェ~ン😭

ABC 179F Simplified Reversi

自己記録用 遅延セグ木で殴るのは分かりやすいがO(N+Q)の方は忘れそうだったので。

atcoder.jp

問題

まず一番下の行と一番右の列が白で埋まっていて、それ以外では黒が端っこのマスを除いた(N-2)2マスに黒を敷き詰める。
クエリではどこに白を置くかが与えられ、最終的に残る黒の数を答える必要がある。

解法

まず一番上の行(パターン1のクエリ)に白が置かれる場合を考える。
一番上の行に白をおいて、黒が幾つひっくり返るかが確定するタイミングは、x列目であればy(y<=x)行目に白石が置かれるタイミングである。これは一番左の行に対するクエリ(パターン2)でも同様に考えられる。
そのため、パターン1とパターン2それぞれでの最も小さいx_iの値を記録しておく。その値と比較して、i番目のクエリx_iが小さいのであれば今まで最も小さかった値から、現在のx_iまでの値を確定させることが出来る。これはパターン1であればパターン2の最も小さかった値、パターン2であればパターン1の最も小さかった値を元に計算することが出来る。
クエリがこれまでの値より大きいのであれば、既に値が確定しているので再度計算する必要はない。
この最も小さい値に応じての計算がクエリ全体でN、クエリ自体がQ個あることからO(N+Q)で求める事ができる。

提出

atcoder.jp