当前位置:编程学习 > C/C++ >>

HDU 1506 Largest Rectangle in a Histogram


重点:从左到右,对于每个点,记算出他所能向左和向右延伸的最大边界

[cpp] 
#include<stdio.h> 
__int64 max,ans; 
struct node 

   int l,r; 
   __int64 v; 
}a[100010]; 
int main() 

   int i,n; 
   while(scanf("%d",&n)!=EOF&&n) 
   { 
       for(i=1;i<=n;i++) 
       { 
            scanf("%I64d",&a[i].v); 
            a[i].l=a[i].r=i; 
       } 
       a[0].v=a[n+1].v=-1; 
       for(i=1;i<=n;i++) 
       { 
          while(a[i].v<=a[a[i].l-1].v)//延伸左边界 
          { 
              a[i].l=a[a[i].l-1].l; 
          } 
       } 
       for(i=n;i>=1;i--) 
       { 
          while(a[i].v<=a[a[i].r+1].v)//延伸右边界 
          { 
             a[i].r=a[a[i].r+1].r; 
          } 
       } 
       max=0; 
       for(i=1;i<=n;i++) 
       { 
           ans=a[i].v*(a[i].r-a[i].l+1); 
           if(max<ans) max=ans; 
       } 
       printf("%I64d\n",max); 
   } 
   return 0; 

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,