P1165 日志分析

点击查看代码
#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
posted @ 2025-11-25 00:37  AnoSky  阅读(2)  评论(0)    收藏  举报