yukicoder 649 ここでちょっとQK!
K は固定で与えられる。数の集合 S に対する以下の Q 個のクエリを処理してください。i 番目のクエリは以下のいずれかです。
タイプ 1: S に数 v[i] を追加する。
タイプ 2: S に含まれる数のうち K 番目に小さい数を答え、その数を S から削除する。
・1 <= Q <= 200000
・1 <= K <= 200000
・0 <= v[i] <= 1018
解法
公式解説に以下の 3 通りの解法が書いてあります。
- 座標圧縮 + BIT上二分探索
- 2 つの priority_queue
- 平衡二分探索木で殴る
3 つとも実装してみたので別途 Qiita に書きました。