洛谷 P1165 日志分析

在这里插入图片描述
在这里插入图片描述
思路:本题实质为栈中搜索最大值的问题。设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;
}
发布了99 篇原创文章 · 获赞 44 · 访问量 5526

猜你喜欢

转载自blog.csdn.net/weixin_44413191/article/details/102923392