week5 A-最大矩形

题意

给一个直方图,求直方图中的最大矩形的面积。例如,下面这个图片中直方图的高度从左到右分别是2, 1, 4, 5, 1, 3, 3, 他们的宽都是1,其中最大的矩形是阴影部分。
在这里插入图片描述

Input

输入包含多组数据。每组数据用一个整数n来表示直方图中小矩形的个数,你可以假定1 <= n <= 100000. 然后接下来n个整数h1, …, hn, 满足 0 <= hi <= 1000000000. 这些数字表示直方图中从左到右每个小矩形的高度,每个小矩形的宽度为1。 测试数据以0结尾。

Output

对于每组测试数据输出一行一个整数表示答案。

Sample Input

7 2 1 4 5 1 3 3
4 1000 1000 1000 1000
0

Sample Output

8
4000

思路

本题使用单调栈来接替,对于每一个矩形,分别向左和向右运用单调栈来找到该矩形高度向左和向右可以延展的最大距离,最后再对每一个矩形求面积,比较出最大面积(具体请参考代码注释)

代码

#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
using namespace std;
long long s[100010], h[100010], L[100010], R[100010];
void left(long long);//向左延展
void right(long long);//向右延展
int main()
{
	long long n;
	while (scanf("%lld", &n) != EOF && n != 0)
	{
		for (long long i = 1; i <= n; i++)
			scanf("%lld", &h[i]);
		//设置柱状图两侧为绝对小值,以求出柱状图边缘矩形的最大延展距离。
		h[0] = -1;
		h[n + 1] = -1;
		left(n);
		right(n);
		long long  max = 0;
		for (long long i = 0; i <= n; i++)
		{
			long long len = R[i] - L[i] + 1;
			long long area = len * h[i];
			if (area > max)
				max = area;
		}
		cout << max << endl;
	}
	return 0;
}
void left(long long n)
{
	long long l = 0, r = -1;
	for (long long i = n; i >= 0; i--)
	{
		while (l <= r && h[s[r]] > h[i])
		{//新加入的高度低于最小高度
			L[s[r]] = i + 1;//将栈顶元素所代表的矩形向左扩展的边界进行赋值
			r--;//弹栈
		}
		s[++r] = i;//将新元素压入栈中
	}
}
void right(long long n)
{
	long long l = 0, r = -1;
	for (long long i = 1; i <= n + 1; i++)
	{
		while (l <= r && h[s[r]] > h[i])
		{//新加入的高度小于最小高度
			R[s[r]] = i - 1;//将栈顶元素所代表的矩形向右扩展的边界进行赋值
			r--;//弹栈
		}
		s[++r] = i;//将新元素压入栈中
	}
}
内容概要:本文档是上海理工大学光电信息与计算机工程学院学生周文龙撰写的《光电融合集成电路路技术》设计报告,指导教师为隋国荣。报告分为两个部分:一是音乐梦幻灯设计,二是USB转接器仿真设计。音乐梦幻灯设计部分,以单片机为核心,通过硬件电路和软件编程实现简易电子琴,能够自动播放音乐并在电源接通时显示LED灯,详细介绍了硬件组成、原理图、元件清单及调试过程;USB转接器仿真设计部分,旨在搭建USB转接器电路,熟悉AD和嘉立创EDA等仿真平台的操作,绘制并验证电路原理图和PCB制版图,掌握焊接工艺和电路测试,为未来从事电工电子技术行业打下基础。 适合人群:电气工程、自动化、计算机等相关专业的大专院校学生,以及对单片机应用和电子电路设计感兴趣的初学者。 使用场景及目标:①学习单片机控制电子琴的原理和实现方法,包括硬件设计和软件编程;②掌握USB转接器电路的设计流程,包括原理图绘制、仿真、PCB制版图设计和电路板焊接;③提升实际动手能力和解决实际问题的能力,为未来从事相关行业打下基础。 阅读建议:本报告详细记录了设计过程中的每一个环节,包括理论知识的应用和实际操作的经验,建议读者在阅读过程中结合实际操作,逐步理解和掌握每个步骤的具体实现方法。同时,可以参考报告中提到的相关文献和工具,加深对单片机和电子电路设计的理解。
内容概要:PT5000汽轮机滑动轴承系统模拟试验台是一个类似于电厂汽轮机发电机的缩小模型,旨在帮助用户获取汽轮机转子动态行为和滑动轴承油膜现象的实际经验,并研究振动控制方法。该试验台模拟两级涡轮机(低压和中压),每级转子两侧各有8个叶片,共计16个叶片。通过电机驱动而非涡轮发电机,可以进行启停机测试,识别共振现象。试验台还支持多种实验,如不平衡/现场动平衡、轴不对中实验、摩擦实验、油膜故障试验、轴颈轴承实验以及根据油压和温度进行的转子动力学试验。试验台配备了多种传感器和控制系统,包括电涡流传感器、温度传感器、压力传感器等,用于监测和记录实验数据。 适合人群:从事汽轮机设计、制造、维护的技术人员,以及相关专业的高校师生和研究人员。 使用场景及目标:①研究汽轮机转子的动态行为和滑动轴承的油膜现象;②进行振动控制方法的研究;③模拟再现油膜涡动转和油膜震荡,研究其控制条件;④进行不平衡、不对中、摩擦等常见故障的模拟和分析;⑤通过调整油压、温度和预加载力,研究轴的行为变化。 其他说明:该试验台不仅适用于教学和科研,还可用于工业领域的培训和技术验证。试验台具有丰富的配置和可选配件,可以根据具体需求进行定制。试验台的机械和电气参数详细列出,确保用户能够全面了解设备性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值