D - Querying Multiset
・問題URL
https://atcoder.jp/contests/abc212/tasks/abc212_d
・発想
・本番であと一歩のところ?で解けなかったやつ
・P=2で毎回足すのは無理だから足したふりをして答えだすときに足す
・setの重複ありverみたいなのあれば解けそう
・解法
発想は〇。setの重複ありverはpriority_queueにひと手間加えるだけでいいらしい。くやしい。勉強します……
ちなみにXをintにするとsumが結構大きくなって負の方向でオーバーフローするから注意。
・コード
int main(){
int Q;
cin>>Q;
priority_queue<ll,vector<ll>,greater<ll>>pq;
ll sum=0;
rep(i,Q){
int P;
cin>>P;
if(P==1){
ll X;
cin>>X;
X-=sum;
pq.push(X);
}
else if(P==2){
ll X;
cin>>X;
sum+=X;
}
else {
cout<<pq.top()+sum<<endl;
pq.pop();
}
}
}