双向队列
来源:互联网 发布:奇葩校规知乎 编辑:程序博客网 时间:2024/05/01 05:48
双向队列
总时间限制:
5000ms
内存限制:
65536kB
描述
新建的 Beijing Institute Group 银行 (BIG-Bank) 在北理工开了一个营业点,他们装备了由 IBM Coral Studio 提供的现代化计算环境,使用现代的信息技术。通常,每个银行客户都有唯一的用来标识身份的正整数 K ,而每当他来到银行寻求服务时,银行都会给他一个正整数 P ,代表他的优先权。银行一个年轻的管理员李凌对软件服务系统的功能十分惊讶。他建议打破银行传统的最低优先权优先的服务方式,加入最高优先权优先的服务。于是,软件系统将得到如下类型的请求:0 系统终止服务1 K P 将客户 K 加到等待队列中,并赋优先权 P2 为有最高优先权的人服务,并将他从等待队列中删除3 为有最低优先权的人服务,并将他从等待队列中删除银行的软件工程师张国文现在抽不开身,请你替他写一个程序实现这种服务策略。
输入
输入的每行包含一个可能的请求,只有最后一行是停止请求 ( 代码 0) 。你可以认为每个加入客户的请求 ( 代码 1) 中,赋予的优先权都是不同的。每个标识 K 都是小于 106 的数,优先权 P 都是小于 107 的数,客户可能请求多次服务,每次都会得到不同的优先权。
输出
对每个代码为 2 或 3 的请求,程序必须打印被服务的客户的标识。如果此时队列是空,那么打印 0 。
样例输入
2 1 20 14 1 30 3 2 1 10 99 3 2 2 0
样例输出
0 20 30 10 0
想法 c++ map 容器 map将所有的元素按升序排列后,只需按照其要求使用迭代器删除begin()位置或end()–位置的内容即可。
#include<iostream>#include<algorithm>#include<cmath>#include<vector>#include<map>#include<string>#include<cstring>#include<queue>#include<stack>#include<cstdio>using namespace std;typedef long long ll;int main(){ int n; map<int ,int>Q; while(cin>>n && n) { if(n == 1) { int custom , power; cin>>custom>>power; Q.insert(pair<int,int>(power,custom)); } if(n == 2) { if(Q.empty()) cout<<"0"<<endl; else { map<int ,int>::iterator it = Q.end(); it--; cout<<it -> second <<endl; Q.erase(it); } } if(n == 3) { if(Q.empty()) cout<<"0"<<endl; else { map<int ,int>::iterator it = Q.begin(); cout<<it -> second <<endl; Q.erase(it); } } } return 0;}
0 0
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- 双向队列
- Manacher______ztr loves substring(hdu 5677 BestCoder Round #82)
- android Activity 全面总结
- GDB动态库搜索路径
- H5与其他平台交互框架
- java/android 设计模式学习笔记(13)---享元模式
- 双向队列
- 窗口程序完整流程
- 抽象类和接口问题
- Android Activity的生命周期
- python之再谈谈列表,字典,元组
- Objective C转Swift注意事项(一)合理使用结构体,枚举,extensions
- 项目管理过程
- Eclipse启动Tomcat时45秒超时解决方法
- nginx-服务器多虚拟主机配置