优先级队列
定义:
#include<bits/stdc++.h>
using namespace std;
//typedef less<int> Z;
priority_queue <int,vector<int>,greater<int> > a;//递增的优先级队列
priority_queue <int,vector<int>,less<int> > a;//递减的优先级队列//****************注意less<int>后要加一个空格并且int外不加<>;
//这个意思就是第一个int为队列的类型,第二个一般是默认,第三个是增的还是减的;
赋值:可以先定义一个数组再赋值;
priority_queue <int ,vector<int>,less<int> > b;
int a[1000];
for(int i=0;i<n;i++){
cin>>a[i];
b.push(a[i]);
删除;
a.top()用于查看顶端原元素;
a.pop()用于删除顶端元素;
例题
洛谷P1091
#include<bits/stdc++.h>
using namespace std;
int n,q[1000001];
long long w,ls;
typedef greater<int> G;
priority_queue <int,vector<int>,G> a;
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>q[i];
a.push(q[i]);
}for(int i=1;i<n;i++){
ls=a.top();
a.pop();
ls+=a.top();
a.pop();
a.push(ls);
w+=ls;
}cout<<w;
return 0;
}