POJ2559--Largest Rectangle in a Histogram(栈)
来源:互联网 发布:vb入门教程 编辑:程序博客网 时间:2024/04/28 21:57
题目大意:有n个宽为1,高为h1,h2,h3...hn的长方形从左到右依次排列,形成一个柱状图,求最大矩形面积
分析:运用栈来求解。
首先,我们可以得到这样一个事实,假设最大的矩形的两个端点为L[i], R[i],高度为h,
那么端点两边的矩形的高都比这个最大矩形的高h要小。接下来,我们从左到右,依次枚举各个矩形,假设当前矩形的高就是最大矩形
的高,然后就开始求L[i]。从右到左R[i]。这里求解L[i],R[i]就是栈的运用了。
以L[i]为例,当后一个矩形的高小于当前的高,就可以结束循环了,得到L[i],否则将后一个矩形的编号入栈。
代码:
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int maxn = 111111;long long n;long long h[maxn];int L[maxn], R[maxn];long long st[maxn];int main() { while(scanf("%lld", &n) && n != 0) { for(int i = 0; i < n; i++) scanf("%lld", &h[i]); int t = 0; for(int i = 0; i < n; i++) { while(t > 0 && h[st[t-1]] >= h[i]) t--; L[i] = t == 0 ? 0 : (st[t-1]+1); st[t++] = i; } t = 0; for(int i = n-1; i >= 0; i--) { while(t > 0 && h[st[t-1]] >= h[i]) t--; R[i] = t == 0 ? n : st[t-1]; st[t++] = i; } long long ans = 0; for(int i = 0; i < n; i++) { ans = max(ans, (long long)h[i]*(R[i]-L[i])); } printf("%lld\n", ans); } return 0;}
0 0
- POJ2559 Largest Rectangle in a Histogram(单调栈)
- POJ2559--Largest Rectangle in a Histogram(栈)
- [POJ2559]Largest Rectangle in a Histogram(单调栈)
- POJ2559-Largest Rectangle in a Histogram(单调栈)
- Largest Rectangle in a Histogram POJ2559(单调栈模板)
- poj2559---Largest Rectangle in a Histogram(单调栈)
- POJ2559 Largest Rectangle in a Histogram(DP)
- poj2559 Largest Rectangle in a Histogram
- poj2559 Largest Rectangle in a Histogram
- 【POJ2559】Largest Rectangle in a Histogram
- Largest Rectangle in a Histogram-POJ2559
- POJ2559 Largest Rectangle in a Histogram
- poj2559 Largest Rectangle in a Histogram
- POJ2559-Largest Rectangle in a Histogram
- poj2559 Largest Rectangle in a Histogram
- POJ2559 Largest Rectangle in a Histogram [单调栈]
- 单调栈 poj2559 Largest Rectangle in a Histogram
- POJ2559 Largest Rectangle in a Histogram(单调栈)
- JavaScript数组
- 代理模式--静态代理
- OC实现猜拳游戏(用了继承特性)
- IOS8最好用技巧:在通知中心添加蜂窝网络
- hadoop2.5.2安装及集成eclipse
- POJ2559--Largest Rectangle in a Histogram(栈)
- HDU2083简易版之最短距离
- OPENCV2 获取彩色图中单一颜色分量
- IOS类和对象的概念
- fflush和fsync的联系和区别
- hdu 1875 畅通工程再续(kruskal || prim)
- Struts2-Ajax无刷新显示信息
- jQuery xml字符串的解析 及 读xml并search
- C++对象模型——Template中的名称决议方式 (第七章)