1 | C NAME RP_VALUE | 名字为NAME的人品值为RP_VALUE的同学加入面试队伍。(名字长度不大于5,0 <= RP_VALUE <= 1,000,000,000) |
2 | G | 排在面试队伍最前面的同学面试结束离开考场。 |
3 | Q | 主面试官John想知道当前正在接受面试的队伍中人品最高的值是多少。 |
#include <iostream>
#include <cstdio>
using namespace std;
char line[7];
struct person{
int rp,i;//i编号
};
const int maxn = 1e6 + 5;
person dq[maxn];
int main()
{
int T;scanf("%d%*c",&T);
while (T --) {
int l = 0,r = 0,rp = 0;//l,r表示表面上加入,离开队伍的
int front = 0,rear = 0;//front,rear记录实际上deque的位置
scanf("%s",line);
while (line[0] != 'E') {
if(line[0] == 'C'){
scanf("%s%d",line,&rp);
while (front < rear && rp > dq[rear - 1].rp) {
rear --;
}
dq[rear].rp = rp;
dq[rear ++].i = r ++;
}else if(line[0] == 'Q'){
if(front == rear) printf("-1\n");
else printf("%d\n",dq[front].rp);
}else if(line[0] == 'G'){
if(l == dq[front].i) front ++;//当deque中的front被pop时,front++
l ++;
}
scanf("%s",line);
}
}
return 0;
}