优先队列是一个保证队列里元素单调的队列,我们可以利用它来维护一个线性结构的单调性。
一般的优先队列:
当然需要加头文件
#include <queue>
priority_queue <int ,vector<int> ,greater<int> > Q;//这是从小到大 int main(){ in(n); REP(i,1,n) in(x),Q.push(x); REP(i,1,n) cout<<Q.top()<<" ",Q.pop(); }
priority_queue <int ,vector<int> ,less<int> > Q;//这是从大到小 int main(){ in(n); REP(i,1,n) in(x),Q.push(x); REP(i,1,n) cout<<Q.top()<<" ",Q.pop(); }
记住:less和greater不是字面意思,刚好反过来。还用中间的vector不用写头文件。
结构体优先队列:
struct node{ int a,b,c; }; bool operator < (node x,node y){ return x.b>y.b;//注意这里,这个符号一定要反着来,这个表示从小到大排序 } int n; int x,y,z; priority_queue <node> Q; int main(){ in(n); REP(i,1,n) in(x),in(y),in(z),Q.push(node{x,y,z}); REP(i,1,n) cout<<Q.top().b<<" ",Q.pop(); }