hdu 1506 Largest Rectangle in a Histogram DP 单调队列

来源:互联网 发布:一朝成名天下知 编辑:程序博客网 时间:2024/05/17 01:46
//考察点:动态规划,又有说是单调队列(还不了解)//思路:为每一个点记录可以左最远延伸到的位置,和向右最远延伸到的位置//但是不能暴搜,会超时的。具体见下面的代码//提交情况:1.TLE 多次,原因:h[0]=h[n+1]设置成了0,会出现问题//提交情况:2.WA 多次,原因:必须要将数组改成__int64类型的才能通过//收获:使用l[i]=l[l[i]-1]这样的语句可以使滑动速度加快//AC code#include<stdio.h>int l[100005];int r[100005];__int64 h[100005];int n;int main(){while(scanf("%d",&n)&&n){int i;for(i=1;i<=n;i++){scanf("%I64d",&h[i]);l[i]=r[i]=i;}h[0]=h[n+1]=-1;for(i=1;i<=n;i++){while(h[l[i]-1]>=h[i]){l[i]=l[l[i]-1];}}for(i=n;i>=1;i--){while(h[r[i]+1]>=h[i])r[i]=r[r[i]+1];}__int64 Max=-1;__int64 tmp;for(i=1;i<=n;i++){tmp=h[i]*(r[i]-l[i]+1);if(tmp>Max)Max=tmp;}printf("%I64d\n",Max);}return 0;}

原创粉丝点击