看病要排队 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Problem Description 看病要排队这个是地球人都知道的常识。 现在就请你帮助医院模拟这个看病过程。
Input 输入数据包含多组测试,请处理到文件结束。
Output 对于每个”OUT A”事件,请在一行里面输出被诊治人的编号ID。如果该事件时无病人需要诊治,则输出”EMPTY”。
Sample Input 7 IN 1 1 IN 1 2 OUT 1 OUT 2 IN 2 1 OUT 2 OUT 1 2 IN 1 1 OUT 1 Sample Output 2 EMPTY 3 1 1
|
AC代码:
#include<iostream>
#include<cstdio>
#include<queue>
#include<string>
using namespace std;
struct point{
int x,y;
friend bool operator < (point p,point q){
if(p.x == q.x){
return q.y < p.y;
}
return q.x > p.x;
}
}s;
int main(){
int n,a,b,c;
string ss;
while(scanf("%d",&n)==1){
priority_queue<point>dc[5];
int t = 1;
for(int i = 0;i < n ;i++){
cin >> ss;
if(ss[0]=='I'){
scanf("%d %d",&b,&c);
s.x = c;
s.y = t++;
dc[b].push(s);
}
else{
scanf("%d",&b);
if(!dc[b].empty()){
printf("%d\n",dc[b].top().y);
dc[b].pop();
}
else
cout << "EMPTY" << endl;
}
}
}
return 0;
}