题意:
三种操作:
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); } } } }