一道优先队列问题,三个优先队列,每次IN就push,OUT先判断是否为空,然后输出
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <algorithm>
#include <vector>
#include<queue>
#include <string>
#include <map>
#include <stack>
using namespace std;
struct node
{
int num,pri;
friend bool operator<(node a,node b)
{
if(a.pri==b.pri) return a.num>b.num;
else return a.pri<b.pri;
}
};
int main()
{
int n,a,b,k;
char s[10];
while(scanf("%d",&n)!=EOF)
{k=1;
priority_queue<node>q[4];
for(int ii=1;ii<=n;ii++)
{scanf("%s",&s);
if(s[0]=='I'){
// printf("in\n");
scanf("%d%d",&a,&b);
node t;
t.num=k;k++;
t.pri=b;
q[a].push(t);
}
else {
scanf("%d",&a);
if(!q[a].empty())
{ node t=q[a].top();
printf("%d\n",t.num);
q[a].pop();}
else printf("EMPTY\n");
}
}
}
return 0;
}