#include<bits/stdc++.h>
using namespace std;
stack <int> z;
int a,b,c,m=-1000,d[200005],f[200005],e=1;//各有用处:a是操作个数,b是操作类型,c对应x,m是当前查询最大值,d是栈中的所有数,f是要输出的东西,e是f的存储下标
int main()
{
cin>>a;
for(int i=1;i<=a;i++)
{
cin>>b;
if(b==0)
{
cin>>c;
z.push(c);//装入
}
if(b==1)
{
z.pop();//取出
}
if(b==2)
{
if(z.empty()==true)
{
f[e]==0;//判空(e是几存的就是第几次查询)
}
else//我的查询方法就是挨个的看栈的顶元素,看完pop掉,再靠d数组存回来
{
for(int j=0;j<z.size();j++)
{
d[z.size()-j]==z.top();
if(z.top()>m)
{
m=z.top();
}
z.pop();
}
f[e]=m;
for(int j=1;j<=z.size();j++)
{
z.push(d[j]);
}
m=-1000;
}
e++;
}
}
for(int i=i;i<=e;i++)
{
cout<<f[i]<<endl; //结束
}
return 0;
}
#include<bits/stdc++.h> using namespace std; stack z; int a,b,c,m=-1000,d[200005],f[200005],e=1;//各有用处:a是操作个数,b是操作类型,c对应x,m是当前查询最大值,d是栈中的所有数,f是要输出的东西,e是f的存储下标 int main() { cin>>a; for(int i=1;i<=a;i++) { cin>>b; if(b==0) { cin>>c; z.push(c);//装入 } if(b==1) { z.pop();//取出 } if(b==2) { if(z.empty()==true) { f[e]==0;//判空(e是几存的就是第几次查询) } else//我的查询方法就是挨个的看栈的顶元素,看完pop掉,再靠d数组存回来 { for(int j=0;j<z.size();j++) { d[z.size()-j]==z.top(); if(z.top()>m) { m=z.top(); } z.pop(); } f[e]=m; for(int j=1;j<=z.size();j++) { z.push(d[j]); } m=-1000; } e++; } } for(int i=i;i<=e;i++) { cout<<f[i]<<endl; //结束 } return 0; }