zoukankan      html  css  js  c++  java
  • POJ2559 Largest Rectangle in a Histogram(单调栈)

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

    POJ2559

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

    所以这题本质也是用单调栈在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
    ",res);
    31     }
    32     return 0;
    33 } 
  • 相关阅读:
    while练习题
    流程控制之for循环
    流程控制之while循环
    流程控制之if判断
    作业
    基本运算符
    输入输出
    基本数据类型
    变量part2
    JDBC中创建表
  • 原文地址:https://www.cnblogs.com/WABoss/p/5225464.html
Copyright © 2011-2022 走看看