单调栈的问题= =发现了单调站用的递减的非常多
总结一下:可以看到题目要求我们找最近俩边的比当前信号塔高的塔,然后改变这俩塔的能量值,那么如果我们创建一个单调递减的队列,新来的元素比栈顶元素的高度小的话,那么很显然新来的元素不能接受能量,但一旦比栈顶元素高的元素来了,那么根据提议,这个高的塔接受能量之后,栈顶元素就完成了他的使命,当然你每次加入一个较低高度元素,栈顶元素相应的能量值就要增加。叙述完毕
// 发射栈.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include<string>
#include<stack>
#include<algorithm>
const int maxn = 100;
using namespace std;
int main()
{
int n;
cin >> n;
stack<int> s;
int recipient[maxn] = { 0 };
int H[maxn] = { 0 };
int V[maxn] = { 0 };
for (int i = 1;i <= n;i++)
{
cin >> H[i] >> V[i];
if (i == 1)s.push(i);
else
{
while (!s.empty() && H[s.top()] < H[i]) { recipient[i] += V[s.top()];s.pop(); }
if (s.empty())s.push(i);
else
{
recipient[s.top()] += V[i];
s.push(i);
}
}
/*while (top && (H[s[top]] < H[i])) { recipient[i] += V[s[top--]]; }
recipient[s[top]] += V[i];
s[++top] = i;*/
}
int maxn = 0;
for (int i = 1;i <= n;i++)
{
maxn = max(maxn, recipient[i]);
}
cout << maxn;
return 0;
}