Double Queue
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 940 Accepted Submission(s): 456
Problem Description
The new founded Balkan Investment Group Bank (BIG-Bank) opened a new office in Bucharest, equipped with a modern computing environment provided by IBM Romania, and using modern information technologies. As usual, each client of the bank is identified by a positive integer K and, upon arriving to the bank for some services, he or she receives a positive integer priority P. One of the inventions of the young managers of the bank shocked the software engineer of the serving system. They proposed to break the tradition by sometimes calling the serving desk with the lowest priority instead of that with the highest priority. Thus, the system will receive the following types of request:
Your task is to help the software engineer of the bank by writing a program to implement the requested serving policy.
Your task is to help the software engineer of the bank by writing a program to implement the requested serving policy.
Input
Each line of the input contains one of the possible requests; only the last line contains the stop-request (code 0). You may assume that when there is a request to include a new client in the list (code 1), there is no other request in the list of the same client or with the same priority. An identifier K is always less than 10
6, and a priority P is less than 10
7. The client may arrive for being served multiple times, and each time may obtain a different priority.
Output
For each request with code 2 or 3, the program has to print, in a separate line of the standard output, the identifier of the served client. If the request arrives when the waiting list is empty, then the program prints zero (0) to the output.
Sample Input
2 1 20 14 1 30 3 2 1 10 99 3 2 2 0
Sample Output
0 20 30 10 0
题目意思:
有3个命令。代号分别为1,2,3
1:代表要创建一个账号,后面输入两组数字,分别代表客户的名字和客户的优先级别。
2:代表输出系统已经开设出来的帐户中优先级别最高的帐户的名字,输出后就销户,如果此时没有帐户,就输出0
3:代表输出系统已经开设出来的帐户中优先级别最低的帐户的名字,输出后就销户,如果此时没有帐户,就输出0
第一次用Map,查了好多资料,问了几个大神才初步了解了map。何为map:
Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力。map中默认采用小于号来排序的(从小到大排序),是对关键字进行排序。
#include <cstdio>
#include <iostream>
#include <cstring>
#include <map>
#include <algorithm>
using namespace std;
int main (){
int n;
map<int,int>s;//关键字是前一个int型,关键字的值是后一个int型
//map<int,int>iterator it 迭代器可以理解为指针
while(scanf("%d",&n),n){
int k,p;
if(n==1){
scanf("%d%d",&k,&p);//k为客户的名字,p为优先级
s[p]=k; //p为关键字,k为关键字的值;
}
else if(n==2){
if(s.empty())
printf("0\n");
else {
printf("%d\n",s.rbegin()->second);//注意:[s.begin(), s.end())是左闭右开区间,所以取map中的最后的数据应该用s.rbegin()处理
s.erase(s.rbegin()->first);//删除时用关键字删除,->first指向的是关键字,->指向的是关键字的值
}
}
else if(n==3){
if(s.empty()){
printf("0\n");
}
else {
printf("%d\n",s.begin()->second);
s.erase(s.begin()->first);
}
}
}
return 0;
}