poj 2559 单调栈
来源:互联网 发布:color picker mac 编辑:程序博客网 时间:2024/05/16 07:56
Largest Rectangle in a Histogram
Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 15582 Accepted: 5032
Description
A histogram is a polygon composed of a sequence of rectangles aligned at a common base line. The rectangles have equal widths but may have different heights. For example, the figure on the left shows the histogram that consists of rectangles with the heights 2, 1, 4, 5, 1, 3, 3, measured in units where 1 is the width of the rectangles:
Usually, histograms are used to represent discrete distributions, e.g., the frequencies of characters in texts. Note that the order of the rectangles, i.e., their heights, is important. Calculate the area of the largest rectangle in a histogram that is aligned at the common base line, too. The figure on the right shows the largest aligned rectangle for the depicted histogram.
Usually, histograms are used to represent discrete distributions, e.g., the frequencies of characters in texts. Note that the order of the rectangles, i.e., their heights, is important. Calculate the area of the largest rectangle in a histogram that is aligned at the common base line, too. The figure on the right shows the largest aligned rectangle for the depicted histogram.
Input
The input contains several test cases. Each test case describes a histogram and starts with an integer n, denoting the number of rectangles it is composed of. You may assume that1<=n<=100000. Then follow n integers h1,...,hn, where 0<=hi<=1000000000. These numbers denote the heights of the rectangles of the histogram in left-to-right order. The width of each rectangle is 1. A zero follows the input for the last test case.
Output
For each test case output on a single line the area of the largest rectangle in the specified histogram. Remember that this rectangle must be aligned at the common base line.
Sample Input
7 2 1 4 5 1 3 34 1000 1000 1000 10000
Sample Output
84000
Hint
Huge input, scanf is recommended.
Source
Ulm Local 2003
#include <iostream>#include <cstring>#include <cstdio>#include <stack>using namespace std;#define maxn 100005int l[maxn], r[maxn];int a[maxn];int n;int main(){ while(~scanf("%d", &n) && n){ for(int i = 0; i < n; i++) scanf("%d", a+i); stack<int> s; for(int i = 0; i < n; i++){ while(!s.empty() && a[s.top()] >= a[i]) s.pop(); l[i] = s.empty() ? 0 : s.top()+1; s.push(i); } while(!s.empty()) s.pop(); for(int i = n-1; i>=0; i--){ while(!s.empty() && a[s.top()] >= a[i]) s.pop(); r[i] = s.empty() ? n-1 : s.top()-1; s.push(i); } long long ans = -1; for(int i = 0; i < n; i++) ans = max(ans, (long long)(r[i]-l[i]+1)*a[i]); printf("%I64d\n", ans); } return 0;}
0 0
- POJ 2559 单调栈
- POJ 2559 单调栈
- poj 2559(单调栈)
- poj 2559 单调栈
- POJ 2559 单调栈
- poj 2559 单调栈
- poj 2559 单调栈
- POJ 2559 单调栈 Histogram
- poj 2559(单调栈)
- 单调栈(poj -- 2559)
- POJ 2559 单调栈模板
- POJ 2559 单调栈模板题
- POJ - 2559(单调栈入门题)
- 【单调栈】POJ 3250
- poj 2796#单调栈
- POJ 2796 单调栈~
- poj 2796(单调栈)
- poj 2059 单调栈
- Java 解惑2
- 初步学习二叉排序树
- 基于Windows CE6.0和 AK4182触摸屏驱动实现
- Weibo API使用说明---JAVA详细版
- linux之虚拟内存相关介绍
- poj 2559 单调栈
- 重构笔记2-代码的坏味道
- 关于安卓eclipse配置环境的无法正常产生R.java
- 减少我们的IF——设计模式和委托
- KMP算法
- Android碰到的问题之一
- 这一夜
- 1196 成绩排序
- POJ2533 Longest Ordered Subsequence (最长上升子序列)