获取一个序列的最大值或最小值时可以想到用优先队列或有序集合;如果同时求最小与最大,则想到用集合解决。本题采用多重集合,利用多重集合有序性解决。
#include <iostream>
#include <set>
using namespace std;
int main(){
int n,op,x;
cin>>n;
multiset<int> s; //初始化多重集合
for(int i=0;i<n;i++){
cin>>op;
switch(op){
case 1:
cin>>x;
s.insert(x);break;
case 2:cout<<*s.begin()<<endl;break;
case 3:cout<<*s.rbegin()<<endl;break; //s.rbegin()是反向迭代器,指向集合的最后一个元素
case 4:s.erase(s.begin());break;
case 5:s.erase(--s.end());break; //erase不可直接用于反向迭代器,所以使用--s.end()代替
}
}
return 0;
}



京公网安备 11010502036488号