HDU 1506 Largest Rectangle in a Histogram

来源:互联网 发布:网络打印机软件 编辑:程序博客网 时间:2024/05/18 17:43

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1506


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


#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;}


原创粉丝点击