您的位置:首页 > 产品设计 > UI/UE

[poj 3481]Double Queue[set || map][STL]

2013-08-09 20:51 330 查看
题意:

三种操作:

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);
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: