背景问题:
一个集合,你发了疯似的往里加数,你想随时获得最小值;
暴力:
加一个就排序,加一个就排序
n^2logn.............................
好用!!!!!!!!!………………!?
这时优先队列闪亮登场
priority_queue <int,vector<int>,greater<int> > q;
它可以让小的站在最前面数
点名第一个叫道他
来让我们迅速ac这道题
#include<bits/stdc++.h>
using namespace std;
int main(){
priority_queue <int,vector<int>,greater<int> > q;
int m;
cin>>m;
while(m--){
int s;
cin>>s;
if(s==1){
int t;
cin>>t;
q.push(t);
}else{
cout<<q.top()<<endl;
q.pop();
}
}
return 0;
}
当然也有让最大值在最前面的
priority_queue <int>q;
来a一下这道题
#include<bits/stdc++.h>
using namespace std;
int main(){
priority_queue<int,vector<int>,greater<int> >q;
int n;
cin>>n;
while(n--){
int s;
cin>>s;
q.push(s);
}
int ans=0;
while(1+1==2){
int x=q.top();
q.pop();
if(q.empty()){
break;
}
int y=q.top();
q.pop();
ans+=x+y;
q.push(x+y);
}
cout<<ans;
return 0;
}