题解 | 两端问优先队列

两端问优先队列

https://www.nowcoder.com/practice/da2887a3fd8549ad826c9cbdaa67f513

获取一个序列的最大值或最小值时可以想到用优先队列或有序集合;如果同时求最小与最大,则想到用集合解决。本题采用多重集合,利用多重集合有序性解决。

#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;
}

全部评论

相关推荐

递归到脑子变傻:杭州还有上位机用VB的,实在没绷住
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务