您的位置:首页 > 其它

hdu 1873 自定义优先队列

2018-03-10 13:41 344 查看
点击打开链接
#include <iostream>
#include<cstdio>
#include<queue>
using namespace std;
struct node{
int x,y;
friend bool operator<(node n1,node n2)
{
if(n1.x!=n2.x) return n1.x<n2.x;                //大数优先,优先级高的先看病
else return n1.y>n2.y;                    //小数优先,编号小的先看病
}
};
int main()
{
int n;
while(scanf("%d",&n)==1)
{
priority_queue<node>pq1;
while(!pq1.empty()) pq1.pop();
priority_queue<node>pq2;
while(!pq2.empty()) pq2.pop();
priority_queue<node>pq3;
while(!pq3.empty()) pq3.pop();
char a[5];
int cnt=1;
for(int i=0;i<n;i++)
{
int doc,k;
scanf("%s",a);
if(a[0]=='I') {
scanf("%d%d",&doc,&k);
node skt;
skt.x=k;
skt.y=cnt;
if(doc==1) pq1.push(skt);
else if(doc==2) pq2.push(skt);
else pq3.push(skt);
cnt++;
}
else if(a[0]=='O') {
scanf("%d",&doc);
if(doc==1) {
if(!pq1.empty()) {
node f=pq1.top();
pq1.pop();
cout<<f.y<<endl;
}
else cout<<"EMPTY"<<endl;
}
else if(doc==2) {
if(!pq2.empty())
{
node f=pq2.top();
pq2.pop();
cout<<f.y<<endl;
}
else cout<<"EMPTY"<<endl;
}
else {
if(!pq3.empty())
{
node f=pq3.top();
pq3.pop();
cout<<f.y<<endl;
}
else cout<<"EMPTY"<<endl;
}
}
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  优先队列 hdu 算法