← 返回题目页

A0971 日志分析

标程

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int N;
    cin >> N;

    // stk:仓库里的集装箱重量(先进后出)
    // mx :与 stk 等长,第 k 格记「从栈底到第 k 格为止的最大重量」
    vector<int> stk, mx;
    stk.reserve(N);
    mx.reserve(N);

    while (N--) {
        int op;
        cin >> op;
        if (op == 0) {
            int x;
            cin >> x;
            stk.push_back(x);
            mx.push_back(mx.empty() ? x : max(mx.back(), x));
        } else if (op == 1) {
            if (!stk.empty()) {   // 仓库为空时忽略出库操作
                stk.pop_back();
                mx.pop_back();
            }
        } else {
            cout << (mx.empty() ? 0 : mx.back()) << '\n';
        }
    }
    return 0;
}

动画演示