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 }