思路:本题实质为栈中搜索最大值的问题。设f[i]为栈中从下到上的i个元素中的最大值,当我们加入一个新元素x时,t++,f[t] = max(f[t-1],x)。那么在出栈时只要输出f[t–]=0,在查找时只要输出f[t]。
#include<bits/stdc++.h>
using namespace std;
const int MAX_N = 201000;
typedef long long ll;
stack<int>s;
int f[MAX_N];//存储前i个元素中的最大值
int main()
{
ll x;
int n,sign;
int i=0;
cin >> n;
while (n--) {
cin >> sign;
if (sign == 0) {
cin >> x; s.push(x);
i++;
f[i] = x > f[i - 1] ? x : f[i - 1];
}
else if (sign == 1) {
if (!s.empty())s.pop();
f[i--] = 0;
}
else if (sign == 2) {//查询
cout << f[i] << endl;
}
}
return 0;
}