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.
7 2 1 4 5 1 3 3 4 1000 1000 1000 1000 0
8 4000
思路:以每一行的高度为高,看左右分别可以延伸到哪里,算出面积求优解
代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
#define N 100005
__int64 h[N],le[N],ri[N];
int main()
{
__int64 n,i;
while(scanf("%I64d",&n),n)
{
for(i=1;i<=n;i++)
{
scanf("%I64d",&h[i]);
le[i]=ri[i]=i;
}
for(i=1;i<=n;i++)
while(le[i]>1&&h[le[i]-1]>=h[i])
le[i]=le[le[i]-1];
for(i=n;i>=1;i--)
while(ri[i]<n&&h[ri[i]+1]>=h[i])
ri[i]=ri[ri[i]+1];
__int64 ans=0;
for(i=1;i<=n;i++)
{
__int64 temp=((ri[i]-le[i]+1)*h[i]);
if(temp>ans)
ans=temp;
}
printf("%I64d\n",ans);
}
return 0;
}
3457



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



