首页 > 其他 > 详细

Largest Rectangle in a Histogram

时间:2014-07-26 01:21:47      阅读:410      评论:0      收藏:0      [点我收藏+]

hdu1506:http://acm.hdu.edu.cn/showproblem.php?pid=1506

题意:给你一些直的的方块,这些方块的底部在同一条直线上,但是高度不一样,让你找一个最大的方块,这个方块是由这些矩阵拼起来的。

题解:自己太渣了,完全不会这一题怎么写,发现自己的思维能力太弱了,根本不会思考,。。。。不说了,继续努力。这一题要处理出以每个方块为中心向左向右分别能扩展的距离,所谓能扩展就是指左边最长的比他大的距离,这样计算的时候就可以知道如果以这个方块的高度为矩阵的高,最大会得到的面积。处理完之后,然后for一遍得到最大面积。

bubuko.com,布布扣
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 const int N=5*1e5+4;
 7 int ll[N],rr[N];
 8 int a[N];
 9 long long ans;
10 int n;
11 int main(){
12    while(~scanf("%d",&n)&&n){
13       memset(ll,0,sizeof(ll));
14       memset(rr,0,sizeof(rr));
15       memset(a,-1,sizeof(a));
16       for(int i=1;i<=n;i++)
17         scanf("%d",&a[i]);
18       for(int i=1;i<=n;i++){
19             ll[i]=i;
20             if(i==1)continue;
21           int t=i-1;
22          while(a[i]<=a[t]){
23             ll[i]=ll[t];
24             t=ll[t]-1;
25          }
26       }
27       for(int i=n;i>=1;i--){
28             rr[i]=i;
29             if(i==n)continue;
30           int t=i+1;
31          while(a[i]<=a[t]){
32             rr[i]=rr[t];
33             t=rr[t]+1;
34          }
35       }
36         ans=0;
37       for(int i=1;i<=n;i++)
38         ans=max(ans,(long long)(rr[i]-ll[i]+1)*(long long)a[i]);
39         printf("%I64d\n",ans);
40    }
41 }
View Code

 

Largest Rectangle in a Histogram,布布扣,bubuko.com

Largest Rectangle in a Histogram

原文:http://www.cnblogs.com/chujian123/p/3868950.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!