Official
B - Get Min Editorial
by
B - Get Min Editorial
by
cn449
この問題は、多重集合に対して \(1\) つの要素を追加、最小値の取得・削除を行うことにより解くことができます。
この操作は、優先度付きキューと呼ばれるデータ構造を用いて行うことができます。優先度付きキューは競技プログラミングにおいてメジャーな多くの言語に標準ライブラリとして存在しています。
また、この問題では制約が十分小さいため、愚直な方法でこの問題を解くこともできます。
例えば、\(C_i\) を現時点での袋の中に入っている \(i\) が書かれたボールの個数としてデータを持ち更新していく方法や、袋の中に入っているボールの多重集合を優先度付きキューではなく単に列として管理するような解法が考えられます。
実装例
#include <bits/stdc++.h>
using namespace std;
int main() {
int q;
cin >> q;
priority_queue<int, vector<int>, greater<>> pq;
while (q--) {
int type;
cin >> type;
if (type == 1) {
int x;
cin >> x;
pq.push(x);
}
else {
int x = pq.top(); pq.pop();
cout << x << '\n';
}
}
}
#include <bits/stdc++.h>
using namespace std;
int main() {
int q;
cin >> q;
vector<int> c(101);
while (q--) {
int type;
cin >> type;
if (type == 1) {
int x;
cin >> x;
c[x]++;
}
else {
for (int i = 1; i <= 100; i++) {
if (c[i] > 0) {
c[i]--;
cout << i << '\n';
break;
}
}
}
}
}
posted:
last update: