Problem D :Querying Multiset
题意:
给出一个装球的袋子,对其进行三种操作,1.向袋子里放入一个编号球。2.将袋子里所有球的编号加一个值。3.输出袋子中编号最小的球的编号并将其扔出袋子。输出每次操作三扔出的编号。
知识点:
优先队列
题意:
由于优先队列具有自动对数据进行排序的特性,所以这题可以使用优先队列完美ac。
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
ll n, k, x;
cin >> n;
priority_queue<ll,vector<ll>,greater<ll>> q;
ll sum = 0;
while (n -- ) {
cin >> k;
if(k == 1 ) {
cin >> x;
q.push(x - sum);
}
if(k == 2) {
cin >> x;
sum += x;
}
if(k == 3) {
cout << q.top() + sum << endl;
q.pop();
}
}
return 0;
}