【题目描述】:

地面上从左到右并排紧挨着摆放多个矩形,已知这此矩形的底边宽度都为1,高度不完全相等。求在这些矩形包括的范围内能得到的面积最大的矩形,打印出该面积。所求矩形可以横跨多个矩形,但不能超出原有矩形所确定的范围。

如 n = 7, 序列为2 1 4 5 1 3 3

       口                     口           口口                   回回           口口  口口             回回  口口     口  口口  口口         口  回回  口口     口口口口口口口         口口回回口口口     

最大面积:8

【输入描述】:

输入有多组数据,每组数据一行:

第一个数N,表示矩形个数

后面跟N个正整数,第i个正整数hi表示第i个矩形的高度。

最后一行,以一个单独的0结束。

【输出描述】:

每组输入数据一行,一个数表示最大矩形面积。

【样例输入】:

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

【样例输出】:

8
4000

【时间限制、数据范围及描述】:

时间:1s 空间:64M

30 %: 1<=N<=100

60 %: 1<=N<=1,000

100%: 1<=N<=500,000,0<=hi<=1,000,000,000

解题思路:

这题数据范围是1<=N<=500,000,0<=hi<=1,000,000,000,又是多组数据,所以我们几乎只能考虑O(N)算法。题目要求找最大矩形的面积,那么就等价于对于每个统计图高度,找到他左边第一个比他小的位置和右边第一个比他小的位置即可。那么跑一边单调栈即可解决问题。

AC代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
int n,a[500005],l[500005],r[500005];
int st[500005],tp;
ll mx(ll x,ll y){return x>y?x:y;
}
void work(){ll maxn=0;tp=0;memset(l,0,sizeof(l));memset(r,0,sizeof(r));for(int i=1;i<=n;i++){scanf("%d",&a[i]);}for(int i=1;i<=n;i++){while(tp>0&&a[st[tp]]>a[i]){r[st[tp]]=i;tp--;}l[i]=st[tp]+1;tp++;st[tp]=i;}for(int i=1;i<=n;i++){if(r[i]==0)r[i]=n+1;maxn=mx(maxn,(ll)((ll)(r[i]-l[i])*(ll)a[i]));}printf("%lld\n",maxn);
}
int main(){while(1){scanf("%d",&n);if(n==0)break;work();}return 0;
}

POJ 2559 题解 最大矩形面积 单调栈相关推荐

  1. 最大矩形面积——单调栈

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

  2. poj 2559 Largest Rectangle in a Histogram 栈

    // poj 2559 Largest Rectangle in a Histogram 栈 // // n个矩形排在一块,不同的高度,让你求最大的矩形的面积(矩形紧挨在一起) // // 这道题用的 ...

  3. leetcode 1504. Count Submatrices With All Ones | 1504. 统计全 1 子矩形(单调栈)

    题目 https://leetcode.com/problems/count-submatrices-with-all-ones/ 题解 本题与 leetcode 84. Largest Rectan ...

  4. leetcode 85. Maximal Rectangle | 85. 最大矩形(单调栈)

    题目 https://leetcode.com/problems/maximal-rectangle/ 题解 本题与 leetcode 84. Largest Rectangle in Histogr ...

  5. LeetCode--85.最大矩形(单调栈)

    最大矩形(单调栈) 1. 题目描述 2. 题目分析 3. C语言实现 1. 题目描述 难度:困难 2. 题目分析 这道题目似曾相识啊,最大矩形面积的问题我们在LeetCode84.柱状图中最大的矩形也 ...

  6. 直方图中最大的矩形(单调栈2)

    题目描述 直方图是由在公共基线处对齐的一系列矩形组成的多边形. 矩形具有相等的宽度,但可以具有不同的高度. 例如,图例左侧显示了由高度为2,1,4,5,1,3,3的矩形组成的直方图,矩形的宽度都为1: ...

  7. leetcode 84. Largest Rectangle in Histogram | 84. 柱状图中最大的矩形(单调栈)

    题目 https://leetcode.com/problems/largest-rectangle-in-histogram/ 题解 一句话总结:遍历数组,对于每个height[i],以其自身的高度 ...

  8. [Leedcode][JAVA][第84题][柱状图中最大的矩形][暴力][单调栈]

    [问题描述][困难] 给定 n 个非负整数,用来表示柱状图中各个柱子的高度.每个柱子彼此相邻,且宽度为 1 .求在该柱状图中,能够勾勒出来的矩形的最大面积.以上是柱状图的示例,其中每个柱子的宽度为 1 ...

  9. 【CSP201312-3】最大的矩形,单调栈

    problem 201312-3 试题名称: 最大的矩形 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ ...

最新文章

  1. 【Netty】大白话 Netty 核心组件分析
  2. transformers理论解释
  3. sql sum条件求和_Hive中使用over()实现累积求和和滑动求和
  4. 如何进入npm_如何用docsify在Github搭建自己的知识文档?
  5. 架构宣言: MDA 实战
  6. python 对象_Python中的Barrier对象
  7. VS2019/openGL/freeglut配置
  8. c语言string函数的用法_同一个函数的五六个版本,C++string insert函数详解
  9. 诗与远方:无题(十四)
  10. Verilog HDL 学习笔记3-Latch
  11. 反编译获取线上任何微信小程序源码(转)
  12. 【OpenCV入门教程之十一】 形态学图像处理(二):开运算、闭运算、形态学梯度、顶帽、黑帽合辑
  13. 转载:编剧技巧思路乱谈
  14. linux中dd命令详解,Linux基础知识之dd命令详解
  15. Chrome无痕模式
  16. 博客系统程序(页面设计)
  17. 微信分享 微信对图片文字大小的限制 代码如下
  18. 【论文精读3】MVSNet系列论文详解-P-MVSNet
  19. 易开发易投产的51单片机时钟计时器:番茄时钟——TFT彩屏显示方案
  20. 安卓自定义控件:画一个正五边形

热门文章

  1. gpio stm8 管脚 配置工具_stm8的GPIO引脚模式
  2. Linux常用、常见 英语词汇、英语单词;无序版、表格版;
  3. 使用PyPDF实现批量添加水印
  4. 每日一笑 | 不忘初心,最爱扫雷~
  5. Android 中rc文件详解
  6. 下推式磁悬浮(一):制作清单
  7. 20211105: Cmakelist常用代码;
  8. Libra的启示:加强科技企业在区块链的技术创新与应用探索|赛迪智库
  9. ZYNQ7035使用FDMA读写PL DDR
  10. 某天咸得无聊写的水题题面