发射栈

3 篇文章 0 订阅
该博客探讨了一种利用单调栈解决计算机科学中的问题,即如何找到最近的两个高于当前信号塔的塔,并调整它们的能量值。通过创建一个单调递减的栈,当新元素高度小于栈顶元素时,栈顶元素不传输能量;反之,栈顶元素将能量传给新高塔后被弹出。博主详细解释了算法过程,并提供了C++代码实现。
摘要由CSDN通过智能技术生成

单调栈的问题= =发现了单调站用的递减的非常多
总结一下:可以看到题目要求我们找最近俩边的比当前信号塔高的塔,然后改变这俩塔的能量值,那么如果我们创建一个单调递减的队列,新来的元素比栈顶元素的高度小的话,那么很显然新来的元素不能接受能量,但一旦比栈顶元素高的元素来了,那么根据提议,这个高的塔接受能量之后,栈顶元素就完成了他的使命,当然你每次加入一个较低高度元素,栈顶元素相应的能量值就要增加。叙述完毕

// 发射栈.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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值