/*其实此题就是一个对应关系的题,如果用优先队列需要300多行的代码而且难以理解*/
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <set>
using namespace std;
int main()
{
set < pair <int , int> >s;
set < pair <int , int> >::iterator it;//迭代器有点像for循环是个指针操作用于遍历容器中的元素等
int n,k,p;
while(scanf("%d", &n) != EOF && n){
if(n == 1){
scanf("%d%d", &k,&p);
s.insert(make_pair(p, k));//make_pair可以自动生成想要的pair类型方便
continue;//n==1的时候不用输出
}
if(n == 2){
if(s.empty()) {cout << "0" << endl;continue;}
it = s.end();
it--;//这里it--的原因是s.end()位置为越界的位置是最后一个值+1的位置,每次一旦输出优先级最高的那么就需要把这个释放所以要it--
}
if(n == 3){
if(s.empty()) {cout << "0" << endl;continue;}
it = s.begin();
//it++;这里s.begin()为第一个值的位置所以不用it++
}
if(!s.empty()) cout << (*it).second<< endl;
s.erase(it);//这是删除容器中的刚刚输出的元素
}
return 0;
}
poj3481(通过stl中的set,以及pair和make_pair简单通过)
最新推荐文章于 2021-02-18 11:16:36 发布