点击查看代码
#include<bits/stdc++.h>
using namespace std;
const int N=200010;
//mxstk和stk始终保持相同的大小,记录的是从栈底到该位置的最大值,弹出的话不会将所有的最大值弹出,如果最后一个加入的不是最大值的话那么前面的数依旧是最大值
int stk[N],mxstk[N];
int n,tt;
int main()
{
cin>>n;
int op,x;
while(n--){
cin>>op;
if(op==0){
cin>>x;
stk[++tt]=x;
if(tt==0) mxstk[tt]=x;
else mxstk[tt]=max(x,mxstk[tt-1]);
}else if(op==1){
tt--;
}else if(op==2){
if(tt==0) cout<<0<<endl;
else cout<<mxstk[tt]<<endl;
}
}
return 0;
}
核心是辅助栈的构建,辅助栈应当保持和主栈一样的大小并且记录从栈底到tt的最大值如main 2 3 5 2 6max2 3 5 5 6