/*其实此题就是一个对应关系的题,如果用优先队列需要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;}
新闻热点
疑难解答