B - Flip Card Stack 解説
by
Tamiji
印刷ページ
殴る
注: この解説では高速化のため非常に高度なデータ構造を使用していますが,本問の制約では公式解説の解法で十分です.
列 \(A=(A_1,\dots,A_N)\) を以下のように定めます.
- 上から \(i\) 番目のカードに書かれている数を \(x\) とする.そのカードが表向きのとき \(A_i=x\),裏向きのとき \(A_i=-x\).
最初 \(A=(1,\dots,N)\) です.また, \(i\) 回目の操作は以下のように表せます.
- \(A\) の \(1,\dots,K_i\) 番目を反転する.
- 各 \(j(1\le j\le K_i)\) について, \(A_j\) に \(-1\) をかける.
これは Implicit Treap (遅延伝搬反転可能乱択平衡二分木) を用いてそのまま実装できます.
計算量は \(O(N+Q\log N)\) ですが,かなり定数倍が重いです.
投稿日時:
最終更新:
