题目:http://acm.hdu.edu.cn/showproblem.php?pid=1873
这题可以直接数组模拟 也可以用 优先队列。。
不会优先队列 所以 整理学习一下。。
首先要知道:标准库默认使用元素类型的‘<’操作符来确定它们之间的优先级关系。
然后常用的调用方法和调用队列类似。。在前面加上priority 就行, //priority_queue<int> qi;
自定义运算优先级的方法是:
struct node
{
friend bool operator< (node n1, node n2)
{
return n1.priority < n2.priority;
}
int priority;
int value;
};
还有就是标准库默认使用元素类型的<操作符来确定它们之间的优先级关系 不能用>;
下面是AC代码:
#include<queue>
#include<iostream>
using namespace std;
struct ss
{
friend bool operator < (const struct ss n1,const struct ss n2)
{
if(n1.b==n2.b)
return n1.num>n2.num;
return n1.b < n2.b;
}
int num,b;
};
int main()
{
int n,x,v,y;
char str[10];
ss s;
while(scanf("%d",&n)!=EOF)
{
priority_queue<ss>Q[4];
v=1;
while(n--&&scanf("%s %d",str,&x))
{
if(str[0]=='I')
{
scanf("%d",&y);
s.num=v++;s.b=y;
Q[x].push(s);
}
else
{
if(!Q[x].empty())
{
printf("%d\n",Q[x].top().num);
Q[x].pop();
}
else printf("EMPTY\n");
}
}
}
return 0;
}