分析:
暴力肯定過不了。維護一個從大到小的單調隊列。
想清楚這些事:
1. 如果前面有人的val比當前加入隊伍的人的val小,那麼前面那個人的val永遠對答案沒有貢獻,可以刪去。
2. 再有就是要刪除出隊的人,但由於是按照先入隊先出隊的順序來刪,可以先把這些人的val保留在單調隊列裏面,下一次找最大RP_val的時候把這些不合法的刪掉即可。
注意:噹噹前實際隊伍裏面沒有人的時候輸出 “-1”
#include<cstdio>
#define MAXL 1000000
struct node{
int pos,val;
}que[MAXL+10];
char s[20];
int main()
{
int T;
scanf("%d",&T);
while(T--){
scanf("%s",s);
int front=0,rear=0,cnt=0,del=0,x;
while(scanf("%s",s)){
if(s[0]=='E')
break;
if(s[0]=='C'){
scanf("%s%d",s,&x);
while(front<rear){
if(que[rear-1].val<=x)
rear--;
else
break;
}
que[rear].pos=++cnt,que[rear].val=x;
rear++;
}
else if(s[0]=='G')
del++;
else{
while(front<rear){
if(que[front].pos<=del)
front++;
else
break;
}
if(del==cnt)
printf("-1\n");
else
printf("%d\n",que[front].val);
}
}
}
}