CF #207 A: Knight Tournament (356A)
セグ木で解けると聞いて解こうとしたけど、無理だったのでセグ木を使わず解いた。
問題概要
問題:
codeforces.com
〜までの番号が付いた人の王様が、勝ち残り形式で勝負をします。勝負は回行われます。勝負は順次行われていき、番目の勝負の情報として "戦った王様の中で一番小さい番号が、大きい番号が番目であり、王様が勝ち抜いた" が与えられます。各王様がどの王様に倒されたかを出力してください。優勝した王様に関してはを出力してください。
解法
セグ木を使うと聞いていたのでセグ木で解こうとしたが、更新時、クエリ時の動きが分からなくて断念した。よくよく考えると、勝負は順番に行われていくので、「なる王様が戦う勝負に関して、まだ誰に倒されたかが分かっていないときは王様が倒された相手としてを記録しておく」ことで誰に倒されたかが分かります。
実際に解くときはsetでまだ誰に倒されたか分かっていない王様を管理しておき、誰に倒されたか分かった時点でsetから除いていく(erase関数を使う)ことでうまく誰に倒されたかが分かります。番目の勝負の勝者であるに関してはまだ誰に倒されたかが分からないので、その王様に関してだけスキップすることに注意です。計算量はです(間違っていたらすみません)
提出:
https://codeforces.com/contest/356/submission/60293084
計算量が間違っていたり、セグ木での解き方が分かる方は教えてください。