POJ 2559 题解 最大矩形面积 单调栈
【题目描述】:
地面上从左到右并排紧挨着摆放多个矩形,已知这此矩形的底边宽度都为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 题解 最大矩形面积 单调栈相关推荐
- 最大矩形面积——单调栈
问题描述 给一个直方图,求直方图中的最大矩形的面积.例如,下面这个图片中直方图的高度从左到右分别是2, 1, 4, 5, 1, 3, 3, 他们的宽都是1,其中最大的矩形是阴影部分. Input 输入 ...
- poj 2559 Largest Rectangle in a Histogram 栈
// poj 2559 Largest Rectangle in a Histogram 栈 // // n个矩形排在一块,不同的高度,让你求最大的矩形的面积(矩形紧挨在一起) // // 这道题用的 ...
- leetcode 1504. Count Submatrices With All Ones | 1504. 统计全 1 子矩形(单调栈)
题目 https://leetcode.com/problems/count-submatrices-with-all-ones/ 题解 本题与 leetcode 84. Largest Rectan ...
- leetcode 85. Maximal Rectangle | 85. 最大矩形(单调栈)
题目 https://leetcode.com/problems/maximal-rectangle/ 题解 本题与 leetcode 84. Largest Rectangle in Histogr ...
- LeetCode--85.最大矩形(单调栈)
最大矩形(单调栈) 1. 题目描述 2. 题目分析 3. C语言实现 1. 题目描述 难度:困难 2. 题目分析 这道题目似曾相识啊,最大矩形面积的问题我们在LeetCode84.柱状图中最大的矩形也 ...
- 直方图中最大的矩形(单调栈2)
题目描述 直方图是由在公共基线处对齐的一系列矩形组成的多边形. 矩形具有相等的宽度,但可以具有不同的高度. 例如,图例左侧显示了由高度为2,1,4,5,1,3,3的矩形组成的直方图,矩形的宽度都为1: ...
- leetcode 84. Largest Rectangle in Histogram | 84. 柱状图中最大的矩形(单调栈)
题目 https://leetcode.com/problems/largest-rectangle-in-histogram/ 题解 一句话总结:遍历数组,对于每个height[i],以其自身的高度 ...
- [Leedcode][JAVA][第84题][柱状图中最大的矩形][暴力][单调栈]
[问题描述][困难] 给定 n 个非负整数,用来表示柱状图中各个柱子的高度.每个柱子彼此相邻,且宽度为 1 .求在该柱状图中,能够勾勒出来的矩形的最大面积.以上是柱状图的示例,其中每个柱子的宽度为 1 ...
- 【CSP201312-3】最大的矩形,单调栈
problem 201312-3 试题名称: 最大的矩形 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ ...
最新文章
- 【Netty】大白话 Netty 核心组件分析
- transformers理论解释
- sql sum条件求和_Hive中使用over()实现累积求和和滑动求和
- 如何进入npm_如何用docsify在Github搭建自己的知识文档?
- 架构宣言: MDA 实战
- python 对象_Python中的Barrier对象
- VS2019/openGL/freeglut配置
- c语言string函数的用法_同一个函数的五六个版本,C++string insert函数详解
- 诗与远方:无题(十四)
- Verilog HDL 学习笔记3-Latch
- 反编译获取线上任何微信小程序源码(转)
- 【OpenCV入门教程之十一】 形态学图像处理(二):开运算、闭运算、形态学梯度、顶帽、黑帽合辑
- 转载:编剧技巧思路乱谈
- linux中dd命令详解,Linux基础知识之dd命令详解
- Chrome无痕模式
- 博客系统程序(页面设计)
- 微信分享 微信对图片文字大小的限制 代码如下
- 【论文精读3】MVSNet系列论文详解-P-MVSNet
- 易开发易投产的51单片机时钟计时器:番茄时钟——TFT彩屏显示方案
- 安卓自定义控件:画一个正五边形