Hello大家好!很高兴我们又见面啦!给生活添点passion,开始今天的编程之路!

我的博客:<但凡.

我的专栏:《编程之路》《数据结构与算法之美》《题海拾贝》《C++修炼之路》

欢迎点赞,关注!

1、题目 

2、题解 

#include<iostream>
#include<stack>
using namespace std;
const int N = 1e6 + 10;
int v[N];
int h[N];
int ret[N];
int n;
int x;

int main()
{
	cin >> n;
	for (int i = 1;i <= n;i++) cin >> h[i] >> v[i];

	stack<int> s;
	//注意这道题是两边
	//找大
	for (int i = 1;i <= n;i++)
	{
		while (s.size() && h[i] >= h[s.top()]) s.pop();
		
		if (s.size())
		{
			ret[s.top()] += v[i];
		}
		s.push(i);
	}
	//清空栈
	while (s.size()) s.pop();
	for (int i = n;i >= 1;i--)
	{
		while (s.size() && h[i] >= h[s.top()]) s.pop();
		if (s.size()) 
		{
			ret[s.top()] += v[i];
		}
		s.push(i);
	}
	for (int i = 1;i <= n;i++) x = max(x, ret[i]);

	cout << x << endl;

	return 0;
}

Logo

集算法之大成!助力oier实现梦想!

更多推荐