Problem 1894 志愿者选拔
Accept: 1205 Submit: 3808
Time Limit: 1500 mSec Memory Limit : 32768 KB
Problem Description
世博会马上就要开幕了,福州大学组织了一次志愿者选拔活动。
参加志愿者选拔的同学们排队接受面试官们的面试。参加面试的同学们按照先来先面试并且先结束的原则接受面试官们的考查。
面试中每个人的人品是主要考查对象之一。(提高人品的方法有扶老奶奶过街,不闯红灯等)
作为主面试官的John想知道当前正在接受面试的同学队伍中人品值最高的是多少。于是他请你帮忙编写一个程序来计算。
Input
输入数据第一行为一整数T,表示有T组输入数据。 每组数据第一行为”START”,表示面试开始
接下来的数据中有三种情况:
输入 | 含义 | |
1 | C NAME RP_VALUE | 名字为NAME的人品值为RP_VALUE的同学加入面试队伍。(名字长度不大于5,0 <= RP_VALUE <= 1,000,000,000) |
2 | G | 排在面试队伍最前面的同学面试结束离开考场。 |
3 | Q | 主面试官John想知道当前正在接受面试的队伍中人品最高的值是多少。 |
最后一行为”END”,表示所有的面试结束,面试的同学们可以依次离开了。
所有参加面试的同学总人数不超过1,000,000
Output
对于每个询问Q,输出当前正在接受面试的队伍中人品最高的值,如果当前没有人正在接受面试则输出-1。
Sample Input
2 START C Tiny 1000000000 C Lina 0 Q G Q END START Q C ccQ 200 C cxw 100 Q G Q C wzc 500 Q END
Sample Output
1000000000 0 -1 200 100 500
Hint
数据较大建议使用scanf,printf 不推荐使用STLSource
福州大学第七届程序设计竞赛1 /* 2 单调队列维护。 3 以单调递减队列为例。10 9 8 7 6 ... 4 初始化 5 head = 0; tail = -1; 6 进队列:从后往前查找。满足 while( head<=tail && q[ tail ].rp < tmp.rp ) tail --; 7 此时相当于舍弃 tail 原来保存到的数据。 8 出队列:从前往后查找。满足 while( head<=tail && q[ tail ].num <= conunt ) head ++; 9 此时相当于避免比当前值先进来,却又比较大的值,被输出。 10 */ 11 12 #include<iostream> 13 #include<stdio.h> 14 #include<cstring> 15 #include<cstdlib> 16 using namespace std; 17 18 typedef struct 19 { 20 char name[10]; 21 int num; 22 int rp; 23 }Queue; 24 Queue q[1000010]; 25 int main() 26 { 27 int T,head,tail,Num,conunt; 28 char cur[10]; 29 Queue temp; 30 while(scanf("%d",&T)>0) 31 { 32 getchar(); 33 while(T--) 34 { 35 head=0; 36 tail = -1; 37 Num=0;conunt = 0; 38 while(scanf("%s",cur)>0) 39 { 40 if(cur[0]=='S') continue; 41 if(cur[0]=='E') break; 42 if(cur[0]=='C') 43 { 44 scanf("%s %d",temp.name,&temp.rp); 45 temp.num=++Num; 46 47 while(head<=tail && q[tail].rp<temp.rp) 48 tail--; 49 q[++tail]=temp; 50 } 51 else if(cur[0]=='Q') 52 { 53 while(head<=tail && q[head].num<=conunt) 54 head++;// 为了解决 比当前的先进来,但是此时最大值的时候。 55 if( head>tail ) 56 printf("-1 "); 57 else printf("%d ",q[head].rp); 58 } 59 else if(cur[0]=='G') 60 conunt++; 61 } 62 } 63 } 64 return 0; 65 }