Double Queue

  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 Kand, 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:

0 The system needs to stop serving
KP Add client K to the waiting list with priority P
2 Serve the client with the highest priority and drop him or her from the waiting list
3 Serve the client with the lowest priority and drop him or her from the waiting list

  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 106, and a priority P is less than 107. 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

解题思路:
  本题要求处理银行排队问题,根据每行的输入处理数据;若输入为1则继续输入两个整数,以第一个数为权值,第二个数为优先级(数值越大优先级越高)加入排队系统中;若输入为2 则处理当前优先级最高的用户,并输出用户的权值;若输入为3 则处理当前优先级最低的用户,并输出用户权值;若输入为0结束运行。若当没有排队人数则无论输入2、3都输出0。

  利用set自带红黑树排序的性质,可以在集合中直接获取最高与最低优先级,用pair记录权值和优先级,将pair传入集合。用迭代器可以获得集合首位(最大优先级)和集合末尾(最小优先级),数据处理完毕后可以通过erase()删除当前用户以便后续操作。

样例分析:
Sample Input

2          //处理高优先级用户,当前无人排队输出0
1 20 14      //优先级为14的用户20开始排队
1 30 3       //优先级为3的用户30开始排队
2          //处理高优先级用户,当前队列中有 20 14 30 3 最高优先级14 输出20
1 10 99      //优先级为99的用户10开始排队
3          //处理低优先级用户,当前队列中有 10 99 30 3 最低优先级3 输出30
2          //处理高优先级用户,当前队列中有 10 99 最高优先级99 输出10
2          //处理高优先级用户, 当前无人排队输出0
0          //输入为0结束
 #include <cstdio>
#include <iterator>
#include <set>
//bits/stdc++.h编译错误
using namespace std;
//利用set的排序性质
struct cmp{ //set比较方法以pair的第二个成员为基准,数值越大的在前
bool operator() (const pair<int, int> &a, const pair<int, int> &b)
{
return a.second > b.second;
}
};
set<pair<int, int>, cmp> waitingList; //用set记录当前队列
int main()
{
int n;
while(scanf("%d", &n) != EOF){ //输入数据
if(n == ) //输入为0结束运行
break;
if(n == ){ //输入为1
pair<int, int> temp;
scanf("%d%d", &temp.first, &temp.second); //记录用户权值与优先级
waitingList.insert(temp); //用户开始排队
}
if(n == ){ //输入为2
if(!waitingList.empty()){
set<pair<int, int>, cmp>::iterator it = waitingList.begin();
//获取优先级最高的用户
printf("%d\n", (*it).first); //输出用户权值
waitingList.erase(it); //删除用户
}else{
printf("0\n"); //队中无人
}
}
if(n == ){
if(!waitingList.empty()){
set<pair<int, int>, cmp>::iterator it = waitingList.end();
it--;
//获取优先级最小的用户
printf("%d\n", (*it).first); //输出用户权值
waitingList.erase(it); //删除用户
}else{
printf("0\n");//队中无人
}
}
}
return ;
}

POJ 3481 Double Queue(set实现)的更多相关文章

  1. POJ 3481 Double Queue STLmap和set新学到的一点用法

    2013-08-08 POJ 3481  Double Queue 这个题应该是STL里较简单的吧,用平衡二叉树也可以做,但是自己掌握不够- -,开始想用两个优先队列,一个从大到小,一个从小到大,可是 ...

  2. POJ 3481 Double Queue(Treap模板题)

    Double Queue Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 15786   Accepted: 6998 Des ...

  3. POJ 3481 Double Queue(STL)

    题意  模拟银行的排队系统  有三种操作  1-加入优先级为p 编号为k的人到队列  2-服务当前优先级最大的   3-服务当前优先级最小的  0-退出系统 能够用stl中的map   由于map本身 ...

  4. POJ 3481 Double Queue

    平衡树.. 熟悉些fhq-Treap,为啥我在poj读入优化不能用啊 #include <iostream> #include <cstdio> #include <ct ...

  5. POJ 3481 Double Queue (treap模板)

    Description The new founded Balkan Investment Group Bank (BIG-Bank) opened a new office in Bucharest ...

  6. poj 3841 Double Queue (AVL树入门)

    /****************************************************************** 题目: Double Queue(poj 3481) 链接: h ...

  7. hdu 1908 Double Queue

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1908 Double Queue Description The new founded Balkan ...

  8. 【Map】Double Queue

    Double Queue Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13258   Accepted: 5974 Des ...

  9. poj 2259 Team Queue

    Team Queue Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 2977   Accepted: 1092 Descri ...

随机推荐

  1. 深入理解js立即执行函数

    看过jQuery源码的人应该知道,jQuery开篇用的就是立即执行函数.立即执行函数常用于第三方库,好处在于隔离作用域,任何一个第三方库都会存在大量的变量和函数,为了避免变量污染(命名冲突),开发者们 ...

  2. 关于EF的一点小记录

    今日新闻:朝鲜要改革开放了!!!比你牛逼的人都在努力,你还有理由懒惰吗? 宇宙强大IDE配套的EF问题记录 今天做数据添加时,Id我设置为int类型了,结果在做Add操作时报的错让我摸不着头脑,后来问 ...

  3. 「BZOJ1426」收集邮票

    题目链接 戳我 \(Solution\) 我们首先转换一下问题: 假设我们进行了k轮得到了所有种类的邮票 则所花费用为: \[(1+2+5+...+k)=\frac{(1+k)*k}{2}=\frac ...

  4. JSOI2008 Blue Mary开公司 | 李超线段树学习笔记

    题目链接:戳我 这相当于是一个李超线段树的模板qwqwq,题解就不多说了. 代码如下: #include<iostream> #include<cstdio> #include ...

  5. jQuery查找标签--选择器,筛选器,模态对话框, 左侧菜单栏

    查找标签 选择器: 基本选择器(同css) id选择器 $("#id") 标签选择器 $('tagName') class选择器 $(".className") ...

  6. var在PHP和JS中的使用

    一,var在PHP中的使用 var在PHP中使用很少,只在类中声明成员变量时候,可以使用var,其相当于public,而且以后逐渐用public替代var,所以在PHP中尽量不使用var声明变量. 二 ...

  7. php的session获取不到问题之ie浏览器(yaf框架)

    最近在内网写代码的时候遇到一个很怪异的问题, 花了好长时间调试,在次记录一下问题和解决方法. 问题描述: 内网开发使用的yaf框架,在火狐,谷歌,创建的session和cookie都能获取的到,但是在 ...

  8. mxonline实战14,全局搜索,修改个人中心页面个人资料信息

    对应github地址:第14天   一. 全局搜索   1. 使用关键词搜索 courses/views.py/CourseListView新增代码,不用把search_keywords传到前端

  9. Java中常用到的文件操作那些事(二)——使用POI解析Excel的两种常用方式对比

    最近生产环境有个老项目一直内存报警,不时的还出现内存泄漏,导致需要重启服务器,已经严重影响正常服务了.获取生成dump文件后,使用MAT工具进行分析,发现是其中有个Excel文件上传功能时,经常会导致 ...

  10. 10分钟教你用Python打造微信天气预报机器人

    01 前言 最近武汉的天气越来越恶劣了.动不动就下雨,所以,拥有一款好的天气预报工具,对于我们大学生来说,还真是挺重要的了.好了,自己动手,丰衣足食,我们来用Python打造一个天气预报的微信机器人吧 ...