Educational Codeforces Round 91 (Rated for Div. 2) - E. Merging Towers

問題リンク

解説

いろいろやり方はあるらしいですが、マージテクを用いる方法を解説します。

この問題の解は i i + 1を辺で結んだときの (連結成分数) - 1になります。

ということでまず最初にこれを愚直に求めてしまいましょう。

その後はクエリ毎にマージをしていきます。

マージをするさいに、小さい→大きいほうにマージすることで、全体で O(n \log n)でできることが知られています

でマージするたびに、各整数が連結するかどうかをみていけば解がでます。

これはstd::setなどを用いて O(\log n)でできます。

よって全体の計算量は O(n (\log n) ^ 2)で求めることができました。

提出コード

codeforces.com