题意:
三种操作:
1 k p 向队伍中插入编号为k的优先级为p的客户
2 选择优先级最高的客户出队
3 选择优先级最低的客户出队
set:
可以利用set的有序性和首尾出队功能.
//228K 297MS
#include <cstdio>
#include <set>
using namespace std;
struct node
{
int k,p;
node(){};
node(int a, int b):k(a),p(b){}
friend bool operator<(node a,node b)
{
return a.p<b.p;
}
};
set<node> s;
int main()
{
int op;
while(scanf("%d",&op) && op)
{
switch(op)
{
case 1:
int k,p;
scanf("%d %d",&k,&p);
s.insert(node(k,p));
break;
case 2:
if(s.empty())
printf("0\n");
else
{
set<node>::iterator it = s.end();
it--;
printf("%d\n",(*it).k);
s.erase(it);
}
break;
case 3:
if(s.empty())
printf("0\n");
else
{
set<node>::iterator it = s.begin();
printf("%d\n",(*it).k);
s.erase(it);
}
}
}
}
map:
map自动按照key的顺序排序了~
//228K 282MS
#include <cstdio>
#include <map>
using namespace std;
map<int, int> m;
int main()
{
int op;
while(scanf("%d",&op) && op)
{
switch(op)
{
case 1:
int k,p;
scanf("%d %d",&k,&p);
m[p] = k;
break;
case 2:
if(m.empty())
printf("0\n");
else
{
map<int, int>::iterator it = m.end();
it--;
printf("%d\n",it->second);
m.erase(it);
}
break;
case 3:
if(m.empty())
printf("0\n");
else
{
map<int, int>::iterator it = m.begin();
printf("%d\n",it->second);
m.erase(it);
}
}
}
}