hdu1506 Largest Rectangle in a Histogram

来源:互联网 发布:js 原生排序 编辑:程序博客网 时间:2024/06/02 05:29

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


对于每一块木板,Area=height[i]*(k-j+1)  其中,j<=x<=k,height[x]>=height[i];


#include <stdio.h>#define MAXN 100005_int64 height[MAXN],left[MAXN],right[MAXN];int main(){    _int64 n,i;_int64 area,ans;while(scanf("%I64d",&n)&&n){for(i=1;i<=n;++i){scanf("%I64d",&height[i]);left[i]=i;//表示比height[i]大的数连续的最左边的位置 right[i]=i;//表示比height[i]大的数连续的最右边的位置 }height[0]=height[1+n]=-1;for(i=1;i<=n;++i){while(height[left[i]-1]>=height[i])left[i]=left[left[i]-1];}for(i=n;i>=1;--i){while(height[right[i]+1]>=height[i])right[i]=right[right[i]+1];}ans=0;for(i=1;i<=n;++i){area=(right[i]-left[i]+1)*height[i];if(ans<area)ans=area;}printf("%I64d\n",ans);}return 0;}