[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);
}
}
}
}
三种操作:
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);
}
}
}
}
相关文章推荐
- POJ - 3481 - Double Queue (STL)
- POJ 3096 Surprising Strings(STL map string set vector)
- POJ-3481 Double Queue,Treap树和set花式水过!
- POJ 3481 & HDU 1908 Double Queue (map运用)
- POJ 3481 Double Queue(STL)
- poj 3481 Double Queue STL中map的运用
- POJ 3297 Open Source STL(map+set+pair)
- POJ 3481 & HDU 1908 Double Queue (map运用)
- POJ 3481 Double Queue(STL)
- POJ 3481 Double Queue(STL之双向优先队列)
- POJ 题目3481 Double Queue(SBT ro map)
- poj 3481 Double Queue 数据结构 STL
- POJ 3481 Double Queue(STL)
- POJ 3481 Double Queue(STL)
- POJ 3481 Double Queue(STL)
- poj 3320 Jessica's Reading Problem 【尺取法+STLmap set】
- STL中: string、vector、list、deque、set、map 的区别
- 数据结构::关于STL中map,set,muliset,multimap要说的
- STL中的常用的vector,map,set,sort, list用法笔记
- 带你深入理解STL之Set和Map