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

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


#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define L1 long long
#define L2 __int64
#define inf 0x3f3f3f3f
using 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]=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;
}


你可能感兴趣的:(链表&栈)