Query on a tree again! (SPOJ 2798)
http://www.spoj.pl/problems/QTREE3/
問題
頂点数nのツリーが与えられる。以下の2つのクエリを捌け。
- 頂点iの色を反転させる。(初期状態は白)
- 頂点1からvまでで黒い頂点で頂点1に最も近いものを答えよ。無い場合は-1。
n<=100000
クエリの数<=400000
解法
ツリーのdfs順序(戻りも考慮)を使ったFenwickTreeで色の管理をする。黒い場合は行きの所で1を立て、戻りで-1してキャンセルさせる。これで一つ目のクエリはO(logn)で処理可能。
二つ目のクエリのために前計算で頂点iから2^n戻った場所を記憶しておく。あとは2分探索を使って黒い頂点が最初に出てきた場所を探せば良い。計算時間はO(log^2n)になる。
全体で。TLEが厳しいので頑張ること。