#include<iostream> #include<cstdlib> #include<cstdio> #include<cmath> #include<algorithm> #include<vector> #include<string> #include<sstream> #include<set> #include<map> #include<queue> #include<stack> using namespace std; struct node { char msg[101]; int par; int pri; int index; friend bool operator < (node x1,node x2) //重载 { if(x1.pri!=x2.pri) return x1.pri>x2.pri; //pri越大的优先级越小 else return x1.index>x2.index; //相等情况下,index越大的优先级越小 } }; void run() { int k=0; char str[5]; node mynode; priority_queue<node> Q; while(scanf("%s",str)!=EOF) { if(str[0]=='G') { if(Q.empty()) { printf("EMPTY QUEUE!/n"); continue; } else { mynode=Q.top(); Q.pop(); printf("%s %d/n",mynode.msg,mynode.par); } } else if(str[0]=='P') { scanf("%s%d%d",mynode.msg,&mynode.par,&mynode.pri); mynode.index=k++; Q.push(mynode); } } } int main() { run(); return 0; }