http://acm.hdu.edu.cn/showproblem.php?pid=1873
注意:1、in 与 out 之后输入个数不同,所以先分辨再输入%d%d或%d
2、优先级相同的,按时间先后确定,所以用stable_sort;
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <vector>
using namespace std;
struct E
{
int no;
int priority;
};
vector<E> doc[4];
bool cmp(E A,E B)
{
return A.priority>B.priority;
}
int main()
{
int n,i;
while (scanf("%d",&n)!=EOF)
{
int no=0;
for (i=1;i<=3;i++)
{
doc[i].clear();
}
char str[5];
int d,pri;
E tmp;
while (n--) //n次事件处理
{
scanf("%s",str);
if (strcmp(str,"IN")==0)
{
scanf("%d%d",&d,&pri);
no++;
tmp.no=no;
tmp.priority=pri;
doc[d].push_back(tmp);
}
else
{
scanf("%d",&d);
if (doc[d].size()==0) //该医生队列中没有人
{
printf("EMPTY\n");
}
else
{
stable_sort(doc[d].begin(),doc[d].end(),cmp); //排序获得最高优先级
printf("%d\n",doc[d][0].no); //输出其编号
doc[d].erase(doc[d].begin()); //从队列中删除
}
}
}
}
return 0;
}