Largest Rectangle in a Histogram
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 5335 Accepted Submission(s): 1523
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.
#include<iostream>
using namespace std;
int n,i,a[100010],b[100010],c[100010];
long long sum,m;
int main()
{
c[0]=-1;
while(scanf("%d",&n)!=EOF&&n>0)
{
for(i=1;i<=n;i++)
{
scanf("%d",&c[i]);
a[i]=i;
b[i]=i;
}
c[n+1]=-0x7fffffff;
for(i=1;i<=n;i++)
{
while(c[a[i]-1]>=c[i])
a[i]=a[a[i]-1];
}
for(i=n;i>=1;i--)
{
while(c[b[i]+1]>=c[i])
b[i]=b[b[i]+1];
}
sum=-1;
for(i=1;i<=n;i++)
{
m=b[i]-a[i]+1;
m=m*c[i];
if(m>sum) sum=m;
}
printf("%I64d\n",sum);
}
return 0;
}