平衡二分木を使って数列を昇順に管理する。C++のset
やJavaのTreeSet
と同等なものがあればよいはず。それぞれの数は奇数個あれば1個あるとの同等だし、偶数個あれば存在しないのと同じなので、多重集合である必要はない。各クエリに対しては次の処理を行う:
- 以上以下の区間に対して愚直にxorを計算する;
- 以上以下の区間を削除する;
- 偶奇を考慮して、必要ならを挿入する。
1で間に合うというのが思いつかなくて、遅延更新でなんとかしようと粘ってしまった。1 言われてみればならしでしか掛かっていない。平衡二分木の構築を合わせると、全体の計算量はになる。
でも、それでもできるはず。データの持ち方がおかしかった。 ↩︎