前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >银行的客户队列 【STL 中 Set 和 Pair 的简单使用】

银行的客户队列 【STL 中 Set 和 Pair 的简单使用】

作者头像
Lokinli
发布2023-03-09 14:30:58
3070
发布2023-03-09 14:30:58
举报
文章被收录于专栏:以终为始

题解:

如果每次都排序一遍肯定会超时的,可以使用 STL 中自动排序的 Set ,因为是两个数,所以加上 pair 就可以。

如果是2,那就尾部选一个,然后删除掉。

如果是3,就从头选一个,然后删除掉。

加上 pair 排序就是先按第一个排,再按第二个,都是从小到大的顺序。

注意 set 的begin( ) 和 end( ) 。

一开始的憨憨思路:

最初想的是用两个优先队列,一个大的,一个小的,然后开两个map ,一个记录优先值,一个记录是否把该数删除掉,理论上自己臆想还可以哈哈哈,不过后来发现了这样很麻烦,写了会就放弃了,有一些样例不好处理。

正好复习一下 set 和 pair 使用。

代码语言:javascript
复制
#include<bits/stdc++.h>

using namespace std;

int main()
{
    int q,k,p;
    set<pair<int ,int > > st;
    set<pair<int, int> > :: iterator it;
    while(cin >> q && q){
        if(q == 1){
            cin >> k >> p;
            st.insert(make_pair(p,k));
        }
        else if(q == 2){
            if(st.empty()){
                cout << 0 << endl;
            }
            else {
                it = st.end();
                it--;
                cout << it->second << endl;
                st.erase(it);
            }
        }
        else if(q == 3){
            if(st.empty()){
                cout << 0 << endl;
            }
            else {
                it = st.begin();
                cout << it->second << endl;
                st.erase(it);
            }
        }
    }
    return 0;    
}

某个银行很傲娇,来了一些客户,有时先接待优先级最高的客户,有时先接待优先级最低的客户,有如下四种操作:

0:系统停止服务。

1 K P:增加一个 ID 为 K(K\leq 10^6)的客户,其优先级是 P(P\leq 10^7)。

2:查询优先级最高的客户,接待他,并从等候队列里删除。

3:查询优先级最低的客户,接待他,并从等候队列里删除。

你的任务是依次输出这些客户的 ID。

输入格式

若干行,以 0 结束(总操作数不超过 10^5)。

一个客户可能访问多次;保证在任意时刻,队列中的优先级各不相同。

输出格式

对于 2 和 3 操作,一行一个整数表示 D,若查询无结果,则输出 0。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-05-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 输入格式
  • 输出格式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档