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;
}