//给一个柱形图,找到其中面积最大的矩形。 //对于每一个柱形,找到它最左边的,高度大于等于它下标, 同理也要找到它最右边的,高度大于等于它的 下标。 //但如果普通的顺序遍历的话,最坏情况会退化成O(n^2),这里的优化方法就是,如果当前查找的柱形比它大于等于,那么就直接去找当前柱形的边界。 //这样的话,查找就是跳跃式的。 #include<cstdio> #include<algorithm> #include<cstring> #include<iostream> using namespace std; #define N 100005 long long h[N],l[N],r[N]; int main() { int n,tmp; while(scanf("%d",&n)&&n) { for(int i=1;i<=n;i++) scanf("%I64d",&h[i]); h[n+1]=h[0]=-1; l[1]=1; r[n]=n; for(int i=1;i<=n;i++) { tmp=i; while(1) { if(h[tmp-1]>=h[i]) tmp=l[tmp-1]; else break; } l[i]=tmp; } for(int i=n;i>=1;i--) { tmp=i; while(1) { if(h[tmp+1]>=h[i]) tmp=r[tmp+1]; else break; } r[i]=tmp; } long long ans=0; for(int i=1;i<=n;i++) { ans=max(ans,h[i]*(r[i]-l[i]+1)); } printf("%I64d\n",ans); } return 0; }
hdu 1506 Largest Rectangle in a Histogram
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
上一篇:hdu4549之矩阵快速幂
下一篇:hdu 1106 排序
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
hdu1506 Largest Rectangle in a Histogram--DP/栈
原题链接: http://acm.hdu.edu.cn/showprobl
HDU C++ DP 栈 #include -
HDU 1506 Largest Rectangle in a Histogram
九野的博客,转载请注明出处 http://blog.csdn.net/acmmmm/article/details/1099
#include #define i++ ios 记忆化搜索