Largest Rectangle in a Histogram(HDU1506)

Largest Rectangle in a Histogram HDU1506

一道DP题:

思路:http://blog.csdn.net/qiqijianglu/article/details/8556852

 1 #include <stdio.h>
 2 #include <iostream>
 3 using namespace std;
 4 int a[100005];
 5 int l[100005],r[100005];
 6 int main()
 7 {
 8   int n,i,j;
 9   long long  maxx,sum;
10   while(~scanf("%d",&n)&&n)
11   {
12     maxx=-1;
13     for(i=1;i<=n;i++)
14       scanf("%lld",&a[i]);
15     l[1]=1;
16     r[n]=n;
17     for(i=1;i<=n;i++,l[i]=i)
18         while(a[l[i]-1]>=a[i] && l[i]>1)
19             l[i]=l[l[i]-1];
20      for(i=n;i>=1;i--,r[i]=i)
21         while(a[r[i]+1]>=a[i] && r[i]<n)
22             r[i]=r[r[i]+1];
23     for(i=1;i<=n;i++)
24     {
25         sum=(long long)a[i]*(r[i]-l[i]+1);
26         if(sum>maxx)
27             maxx=sum;
28     }
29     cout<<maxx<<endl;
30   }
31   return 0;
32 }

 

posted on 2013-08-26 21:29  ~~碾压机  阅读(171)  评论(0编辑  收藏  举报