http://acm.hdu.edu.cn/showproblem.php?pid=1873
思路:这题使用优先队列可以解决,优先级高的在前面如果一样就按排队号晓得排列,这里需要开个优先队列数组来记录;
代码:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <queue>
using namespace std;
struct node
{
int m,n,z;
friend bool operator<(node a,node b)
{
if(a.n!=b.n)
return a.n<b.n;
else return a.z>b.z;
}
};
int main()
{
int n;
while(cin>>n)
{
priority_queue<node>Q[4];
node a,b;
char c[5];
int k=1;
int e;
while(n--)
{
cin>>c;
if(strcmp(c,"IN")==0)
{
cin>>a.m>>a.n;
a.z=k++;
Q[a.m].push(a);
}
else
{
cin>>e;
if(Q[e].empty())cout<<"EMPTY"<<endl;
else
{
b=Q[e].top();
Q[e].pop();
cout<<b.z<<endl;
}
}
}
}
return 0;
}