/*************** Problem from : Problem describe : 维护最大值形成的单调递减数组 例如 1-2-3-5-7-2-3-5 那么 在 7还没OUT之前 7前面的1 2 3 5阶段查询结果最大值均为 7 所以在 7 OUT之前 1 2 3 5都是无效的 7 OUT之后 2-3-5同理 2 3 也是无效的 data:2016.12.3 ****************/ #include<iostream> #include<cstdlib> #include<cstdio> #include<algorithm> #include<cmath> #include<map> #include<stack> #include<queue> #include<ctime> #include<cstring> #include<vector> #include<string> #define ll __int64 #define inf 0x3f3f3f3f3f using namespace std; const int maxn = 100005; int main() { // freopen("in.txt","r",stdin); // freopen("out.txt","w",stdout); int i, n, ans=0, x; int num[maxn]={0}, Max_v[maxn]={0}, lenNum=0, k=0, lenMax=0, t=0; char op[10]; while(~scanf("%s", op), op[0]!='E') { if(op[0]=='I') { scanf("%d", &x); num[lenNum++] = x; while(lenMax>t && Max_v[lenMax-1] < x) lenMax--; Max_v[lenMax++]=x; } else if(op[0]=='Q') { printf("%d\n", (lenMax==t)?-1:Max_v[t]); } else if(op[0]=='O') { if(k>=lenNum) continue; if(num[k] == Max_v[t]) t++; k++; } } return 0; }
