3 - スパイ (Spy) Editorial by Mitsubachi


公式解説と同様に、JOI木についてオイラーツアーをします。その後、オイラーツアーで登場した順に頂点の番号を付け替えます。例えば、 $3,1,2$ の順にオイラーツアーで 頂点が登場するなら、以後 $3,1,2$ をそれぞれ $1,2,3$ として扱います。
このときJOI木の部分木に含まれる頂点は区間となり、各クエリではIOI木の部分木が含む番号について、JOI木の部分木に対応する区間と重複するのはどれか、となります。
JOI木の部分木が区間であることを利用して、IOI木の部分木が含む番号のうち小さいほうから $l$ 番目から $r$ 番目までがJOI木の区間と一致するという $l,r$ が二分探索で簡単に求まります。

よって、IOI木の頂点 \(i\) を親とする部分木が含む頂点で \(j\) 番目に小さいものについて、 \(i\) をリーダーとするスパイプロジェクトについて何回成功したかというのが累積和によって求まります。

これより、計算量 \(O(M \log N + N^2)\) でこの問題を解くことができました。

posted:
last update: