POJ2559-Largest Rectangle in a Histogram

http://poj.org/problem?id=2559

当初写出来老高兴了呢。。。

#include<cstdio>
#define N 100001
using namespace std;
int l[N],r[N],h[N];
int main(void)
{
    int n,i;
    while(scanf("%d",&n),n)
    {
        for(i=1;i<=n;i++)
        {
            scanf("%d",&h[i]);
            l[i]=r[i]=i;
        }
        for(i=1;i<=n;i++)
            while(l[i]>1&&h[l[i]-1]>=h[i])
                l[i]=l[l[i]-1];
        for(i=n;i>=1;i--)
            while(r[i]<n&&h[r[i]+1]>=h[i])
                r[i]=r[r[i]+1];
        __int64 ans=0;
        for(i=1;i<=n;i++)
        {
            __int64 temp=(__int64)(r[i]-l[i]+1)*h[i];
            if(ans<temp)
                ans=temp;
        }
        printf("%I64d\n",ans);
    }
    return 0;
}
posted @ 2012-08-29 11:55  Yogurt Shen  阅读(173)  评论(0编辑  收藏  举报