[ABC212D] Querying Multiset

发布时间 2023-04-24 19:09:52作者: OIerBoy

2023-01-08

题目传送门

翻译

难度&重要性(1~10):1

题目来源

AtCoder

题目算法

模拟,优先队列

解题思路

用优先队列存储下加入的元素编号,对操作 \(2\) 把所有的 \(k\) 存在一起。

完成状态

已完成

易错点

注意,操作 \(2\) 只对已加入的编号 \(+k\)。所以在新加入编号时要先拿编号减去 \(k\),最后才能直接加 \(k\)

Code

#include<bits/stdc++.h>
using namespace std;
long long n,m;
priority_queue<long long,vector<long long>,greater<long long>>q;
int main(){
	cin>>n;
    while(n--){
        long long int x,a;
        cin>>x;
        if(x==1){
            cin>>a;
            q.push(a-m);
        }else if(x==2){
            cin>>a;
            m+=a;
        }else{
            cout<<q.top()+m<<endl;
            q.pop();
        }
    }
	return 0;
}