Description
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
Output
Sample Input
7 2 1 4 5 1 3 3 4 1000 1000 1000 1000 0
Sample Output
8 4000
/*POJ: 157ms,1728KB*/
/*HDU: 78ms,1792KB*/
/*LightOJ: 0.112s,2040KB*/
#include<cstdio>
#include<algorithm>
using namespace std;
const int N = 100010;
__int64 h[N];
int l[N], r[N];
int main(void)
{
int n, i, j;
__int64 ans;
while (~scanf("%d", &n), n)
{
for (i = 1; i <= n; ++i)
scanf("%I64d", &h[i]);
for (i = 1; i <= n; ++i)
{
j = i;
while (j > 1 && h[j - 1] >= h[i]) /// 压栈否
j = l[j - 1]; /// 出栈
l[i] = j;
}
for (i = n; i >= 1; --i)
{
j = i;
while (j < n && h[j + 1] >= h[i]) /// 压栈否
j = r[j + 1]; /// 出栈
r[i] = j;
}
ans = 0;
for (i = 1; i <= n; ++i)
ans = max(ans, h[i] * (r[i] - l[i] + 1));
printf("%I64d\n", ans);
}
return 0;
}
348



被折叠的 条评论
为什么被折叠?



