HDU 1506 Largest Rectangle in a Histogram(单调栈)

来源:互联网 发布:协同过滤具体算法 编辑:程序博客网 时间:2024/05/16 07:35

此题和POJ的feel good类似,只不过最后直接求解的是max=a[i]*(r[i]-l[i]+1);坑点是输入的n个数必须用I64,否则WA。


#include<algorithm>#include<iostream>#include<stdio.h>#include<string.h>#include<cstdio>#include<cstdlib>#include<string>#include<queue>#include<map>#include<cmath>#define L1 long long#define L2 __int64#define inf 0x3f3f3f3fusing namespace std;L2 a[1000000];L2 l[1000100],r[1000100];int main(){    int n,m,i,j,k;    while(~scanf("%d",&n)&&n)    {        for(i=1;i<=n;i++){            scanf("%I64d",&a[i]);            l[i]=r[i]=i;        }        for(i=1;i<=n;++i){            while(l[i]>1&&a[l[i]-1 ]>=a[i] ){                l[i]=l[l[i]-1 ];            }        }        for(i=n;i>=1;--i){            while(r[i]<n&&a[r[i]+1 ]>=a[i]){                r[i]=r[r[i]+1 ];            }        }        L2 ma=0;        for(i=1;i<=n;i++){            L2 t=(r[i]-l[i]+1 )*a[i];            if(t>ma){                ma=t;            }        }        printf("%I64d\n",ma);    }    return 0;}


0 0
原创粉丝点击