#1637. 文件传输

文件传输

No testdata at current.


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

int main() {
    
    ios::sync_with_stdio(false);
    cin.tie(0);
    
    int N;
    cin >> N;  // 读取操作总数
    
    stack<int> stk;          // 主栈:存储货物重量(后进先出)
    stack<int> max_stk;      // 辅助栈:存储当前仓库的最大重量(与主栈同步)
    
    while (N--) {            // 遍历每个操作
        int op;
        cin >> op;
        
        if (op == 0) {       // 操作0:入库(格式:0 X)
            int X;
            cin >> X;
            stk.push(X);     // 重量入主栈
            
            // 辅助栈维护当前最大值:空栈则存X,否则存“栈顶与X的较大者”
            if (max_stk.empty()) {
                max_stk.push(X);
            } else {
                max_stk.push(max(max_stk.top(), X));
            }
        } else if (op == 1) { // 操作1:出库(格式:1)
            // 栈非空时才处理,避免空栈操作
            if (!stk.empty()) {
                stk.pop();   // 弹出最晚入库的货物
                max_stk.pop(); // 辅助栈同步弹出,保持状态一致
            }
        } else if (op == 2) { // 操作2:查询(格式:2)
            if (max_stk.empty()) { // 仓库为空时输出0
                cout << "0\n";
            } else { // 否则输出当前最大重量(辅助栈顶)
                cout << max_stk.top() << "\n";
            }
        }
    }
    
    return 0;
}