银行的客户队列 【STL 中 Set 和 Pair 的简单使用】
2023-06-13 09:15:39 时间
题解:
如果每次都排序一遍肯定会超时的,可以使用 STL 中自动排序的 Set ,因为是两个数,所以加上 pair 就可以。
如果是2,那就尾部选一个,然后删除掉。
如果是3,就从头选一个,然后删除掉。
加上 pair 排序就是先按第一个排,再按第二个,都是从小到大的顺序。
注意 set 的begin( ) 和 end( ) 。
一开始的憨憨思路:
最初想的是用两个优先队列,一个大的,一个小的,然后开两个map ,一个记录优先值,一个记录是否把该数删除掉,理论上自己臆想还可以哈哈哈,不过后来发现了这样很麻烦,写了会就放弃了,有一些样例不好处理。
正好复习一下 set 和 pair 使用。
#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。
相关文章
- Python学习:dict和set类型的用法
- ORA-38425: attribute set used for an index object may not be unassigned ORACLE 报错 故障修复 远程处理
- ORA-47344: error updating Rule Set string, string ORACLE 报错 故障修复 远程处理
- Oracle 参数 IGNORE_SESSION_SET_PARAM_ERRORS 官方解释,作用,如何配置最优化建议
- 深入浅出:Oracle数据库SET操作(oracle数据库set)
- MySQL中SET集合的使用方法及注意事项(mysql中set集合)
- MySQL中SET用法详解(mysql中set 用法)
- MySQL中SET使用方法详解(mysql中set作用)
- MySQL中如何使用SET (mysql中set @)
- 用Redis存储数据实现巨大的提升(往redis里set数据)
- Redis的Set数据结构的获取(set的获得redis)
- 重塑Redis Set,实现进一步发挥功能(修改redis set)
- 红色梦幻搭建Redis集群模式SET(redis集群模式set)
- 深入浅出Redis集群Set的简单操作(redis集群set过程)
- 优化优化Redis集合Set的性能(redis集合set性能)
- Redis限制SET长度妙用和管控(redis限制set长度)
- 灵活运用Redis中Set结构(redis设置set)
- Redis获取Set中元素数量的方法(redis获取set个数)