AtCoder Beginner Contest 253 C問題 Max - Min Query
問題
提出解答
(ヒープ) atcoder.jp
問題の概要
多重集合 がある. 最初, は空集合である. 次の 個のクエリを順に処理せよ.
- Type 1: に を 個追加する.
- Type 2: から を 個削除する. ただし, は にある の個数.
- Type 3: を出力する.
制約
- Type 3 のクエリ処理時, は空集合ではない.
解法
この問題に必要な操作は
- 挿入
- 個数を求める.
- 削除
- 最大値, 最小値の発見
である. C++ では multiset で全て高速に実現できる.
しかし, Python においてはこれらを高速に処理できるようなデータ構造がデフォルトで用意されていない. よって, 以下のうちのどれかで対処しなければならない.
- 上記の操作を高速に処理できるようなデータ構造を自作する.
- クエリを 個ずつのブロックに分割する.
- ヒープを利用する.
- BIT 木を使う.
なおこの記述は atcoder.jp を参考にした.
例えば, ヒープを利用したデータ構造は挿入と削除に , 最大値, 最小値の取得と個数の取得は で処理できる.