C - Inc, Dec, Xor 解説 by hiro1729


\(A\)\(M\) 種類の要素があると仮定すると、それらの和は最小でも \(\displaystyle \frac{M(M-1)}{2}\) であり、少なくともその個数のクエリ 1 が与えられていなければいけません。よって、常に、\(A\) の要素は \(O(\sqrt{Q})\) 種類です。

今までのクエリ 2 の個数を \(m\) とすると、クエリ 2 は、\(A_i\) の値を \(1\) 減らすのではなく、\(m\) をインクリメントして \(A_i\)\(max(m,A_i)\) で置き換えるという操作に言い換えられます。(このとき、実際の \(A_i\)\(A_i - m\) です)

したがって、\(A\) に奇数個含まれる要素の集合を管理すると、毎クエリでそれらの xor を計算すればよいので、計算量は \(O(N+Q \sqrt{Q})\) です。

実装例 (C++): https://atcoder.jp/contests/abc470/submissions/78204678

投稿日時:
最終更新: