解题思路:我们设f[i]为栈中从下到上的i个元素中的最大值,当我们加入一个新元素x时,t++,由于多了一个元素,所以f[t]=max(f[t-1],x)。那么在出栈时只要输出f[t-1],在查找时只要输出f[t]。
重点就是上述内容只需要搞懂数组f[i] 的含义就能理解整个题目本质上是使用类似前缀和的思想(但不是前缀和)将需要的数据(最大值)记录下来。
#include <bits/stdc++.h>
using namespace std;
int f[200000+100]; // f[n] 是从上到下i个元素中最大元素是多少
int n; // 栈中数据数量
int main(){
int N;
cin >> N;
for(int i = 1;i<=N;i++){
int num;
cin >> num;
if(num == 0){
int w = 0;
cin >> w;
f[++n] = max(f[n],w);
}
else if(num == 1){ // 出栈
n--;
}
else{
cout << f[n] << endl;
}
}
return 0;
}