博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Largest Rectangle in a Histogram
阅读量:7289 次
发布时间:2019-06-30

本文共 1228 字,大约阅读时间需要 4 分钟。

题目大意:

如下图所示,在一条水平线上方有若干个矩形,求包含与这些矩形的并集内部的最大矩形的面积(在下图中,答案就是阴影部分的面积),矩形个数≤1055

解题思路:

单调栈

我们建立一个栈,用来保存若干个矩形,这些矩形的高度是单调递增的,我们从左到右依次扫描每个矩形:
如果当前矩形比栈顶高或者与栈顶相等,直接进栈。
否则不断去除栈顶,直至栈为空或站定举行高度比当前矩形矩形小,在出栈过程中,我们积累被弹出的矩形的宽度之和,并且每弹出一个矩形,就用它的高度乘上积累的宽度去更新答案。
整个出栈过程结束后,我们把一个高度为当前矩形高度、宽度计值的新矩形入栈。
整个扫描结束后,我们把栈中剩余的矩形依次弹出,按照与上面的相同方法更新答案。
或者增加一个高度为0的矩形a[n+1],以避免在扫描结束后栈中有剩余矩形

Accepted code:

#include
#include
#include
#include
using namespace std; int n,w[100011],a[100011],A[100011]; int main(){ while(1) { scanf("%d",&n); if (n==0) return 0; long long maxn=0; int p=0; a[n+1]=0; for (int i=1;i<=n;i++) scanf("%d",&a[i]); for (int i=1;i<=n+1;i++) { if(a[i]>A[p]) { A[++p]=a[i];w[p]=1; } else { int len=0; while(A[p]>a[i]) { len+=w[p]; maxn=max(maxn,(long long)len*A[p--]); } A[++p]=a[i],w[p]=len+1; } } cout<
<

转载于:https://www.cnblogs.com/Juruo-HJQ/p/9821883.html

你可能感兴趣的文章
svn 提交过程遇到无法提交的问题
查看>>
XerverVM磁盘扩展
查看>>
Python之PyChart画图方法
查看>>
Contains Duplicate II leetcode
查看>>
rman备份概述
查看>>
ubuntu内核配置欣赏
查看>>
修改resolv.conf对于运行中服务不生效问题处理
查看>>
Java程序发送邮件的两种方法
查看>>
MySQL之主从复制和读写分离(Amoeba)
查看>>
玩转awk
查看>>
Linux中逐行读取文件的方法
查看>>
linux 内核该怎么优化
查看>>
自学asp.net笔记 - 第一节 C#基础简略学习
查看>>
selinux、暱名上传文件到ftp服务器
查看>>
socket编程原理
查看>>
Spark操作—aggregate、aggregateByKey详解
查看>>
正式学习react(二)
查看>>
将命令passive-interface用于OSPF
查看>>
mysql 数据同步 出现Slave_IO_Running:No问题的解决方法小结
查看>>
nginx 学习加实战(1 nginx的安装)
查看>>