码迷,mamicode.com
首页 > 其他好文 > 详细

POJ2559 Largest Rectangle in a Histogram(单调栈)

时间:2016-02-28 21:12:02      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:

题目给一个由几个相连接的矩形组成的多边形,计算多边形包含的最大的矩形的面积。

技术分享

要求的矩形的高一定是某一个用来组合的矩形的高;如果枚举每个矩形作为高的话,那样长就是这个矩形能向左向右继续延伸矩形的长度了。

所以这题本质也是用单调栈在O(n)计算出每个数作为最小数向左和向右能延伸的最长距离。

 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 #define MAXN 111111
 5 int a[MAXN];
 6 int l[MAXN],r[MAXN];
 7 int stack[MAXN],top;
 8 int main(){
 9     int n;
10     while(~scanf("%d",&n) && n){
11         for(int i=1; i<=n; ++i){
12             scanf("%d",a+i);
13         }
14         a[++n]=-1;
15         top=0;
16         for(int i=1; i<=n; ++i){
17             l[i]=r[i]=i;
18             while(top && a[stack[top]]>a[i]){
19                 l[i]=l[stack[top]];
20                 r[stack[top]]=i-1;
21                 --top;
22             }
23             if(top && a[stack[top]]==a[i]) l[i]=l[stack[top]];
24             stack[++top]=i;
25         }
26         long long res=0;
27         for(int i=1; i<n; ++i){
28             res=max(res,(r[i]-l[i]+1LL)*a[i]);
29         }
30         printf("%lld\n",res);
31     }
32     return 0;
33 } 

 

POJ2559 Largest Rectangle in a Histogram(单调栈)

标签:

原文地址:http://www.cnblogs.com/WABoss/p/5225464.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!