浅谈栈:https://www.cnblogs.com/AKMer/p/10278222.html

题目传送门:http://poj.org/problem?id=2559

贪心的想,最大的子矩阵顶部肯定会与某个矩阵的顶部重合,所以我们可以考虑对于每个矩阵,如果一个子矩阵的高度与它相同,那么向左向右分别可以延伸多长即可。用单调栈维护,从前往后从后往前扫两遍统计答案即可。

时间复杂度:\(O(n)\)

空间复杂度:\(O(n)\)

代码如下:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll; const int maxn=1e5+5; ll ans;
int n,top;
int a[maxn],stk[maxn],sum[maxn]; int read() {
int x=0,f=1;char ch=getchar();
for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';
return x*f;
} int main() {
while(1) {
n=read();
if(!n)break;top=ans=0;
memset(sum,0,sizeof(sum));
for(int i=1;i<=n;i++)
a[i]=read();
a[++n]=0;
for(int i=1;i<=n;i++) {
while(top&&a[stk[top]]>a[i])sum[stk[top]]+=i-stk[top]-1,top--;
stk[++top]=i;
}top=0;
for(int i=n-1;~i;i--) {
while(top&&a[stk[top]]>a[i])sum[stk[top]]+=stk[top]-i-1,top--;
stk[++top]=i;
}
for(int i=1;i<=n;i++)
ans=max(ans,1ll*a[i]*(sum[i]+1));
printf("%lld\n",ans);
}
return 0;
}

POJ2559:Largest Rectangle in a Histogram的更多相关文章

  1. [POJ2559&POJ3494] Largest Rectangle in a Histogram&Largest Submatrix of All 1’s 「单调栈」

    Largest Rectangle in a Histogram http://poj.org/problem?id=2559 题意:给出若干宽度相同的矩形的高度(条形统计图),求最大子矩形面积 解题 ...

  2. NYOJ-258/POJ-2559/HDU-1506 Largest Rectangle in a Histogram,最大长方形,dp或者单调队列!

                                         Largest Rectangle in a Histogram 这么经典的题硬是等今天碰到了原题现场懵逼两小时才会去补题.. ...

  3. HDU1506: Largest Rectangle in a Histogram(最大子矩阵,好题动态优化左右边界)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1506 刚开始没考虑时间复杂度,直接敲了,直接tle了,之后没有思路,然后看题解,看见大神写的优化非常棒. ...

  4. [dp]POJ2559 && HDOJ1506 Largest Rectangle in a Histogram

    题意 给n个条形的高度, 问能放的最大矩形面积 分析: 从左到右 从右到左 各搞一遍 分别记录      L[i]记录列(从前往后)标 第几列开始 可以往后放高度为a[i]的矩形  R[i]记录列(从 ...

  5. POJ2559/HDU1506 Largest Rectangle in a Histogram (cartesian tree)

    Die datenstruktur ist erataunlich! #include <iostream> #include <cstdio> #include <cs ...

  6. 【题解】Largest Rectangle in a Histogram [SP1805] [POJ2559]

    [题解]Largest Rectangle in a Histogram [SP1805] [POJ2559] [题目描述] 传送: \(Largest\) \(Rectangle\) \(in\) ...

  7. HDU 1506 Largest Rectangle in a Histogram(区间DP)

    题目网址:http://acm.hdu.edu.cn/showproblem.php?pid=1506 题目: Largest Rectangle in a Histogram Time Limit: ...

  8. 第一周 Largest Rectangle in a Histogram

    Language: 题目: Largest Rectangle in a Histogram Time Limit: 1000MS   Memory Limit: 65536K Total Submi ...

  9. Largest Rectangle in a Histogram【单调栈模板】

    Largest Rectangle in a Histogram 题目链接(点击)来源poj 2559 A histogram is a polygon composed of a sequence ...

随机推荐

  1. douban_转自熊博网——牛逼顿

    转自熊博网——牛逼顿 来自: 天云之叶(大道易得,小术难求) 2010-04-21 18:32:27 牛逼顿 作者:singularitys 3月28号是牛顿的忌日,但是知道的人很少,我们毕竟更关心沈 ...

  2. Full卷积 Same卷积 Vaild卷积

  3. Delphi编译指令说明

    Delphi快速高效的编译器主要来自Object PASCAL的严谨,使用Delphi随时都在与编译器交流,大部分情况下不需要干涉编译器的运行,但是有时也需要对编译器进行必要的设置. ******** ...

  4. Android 主线程和子线程通信问题

        Android 如今不支持View在子线程中创建及调用其方法.假设要实现子线程内容更新之后.将结果及时反馈到主线程中,该怎样出来呢?     能够在主线程中创建Handler来实现. 这样子线 ...

  5. statu 设置

    DATA: itab TYPE TABLE OF sy-ucomm. APPEND 'DELE' TO itab. APPEND 'PICK' TO itab. SET PF-STATUS 'STA3 ...

  6. CSS选择器(三)

    九.CSS 伪类 (Pseudo-classes) CSS 伪类用于向某些选择器添加特殊的效果. CSS 伪类 (Pseudo-classes)实例: 1.向文档中的超链接添加不同的颜色. <s ...

  7. Linux系统中UI库curse.h不存在问题——贪吃蛇为例

    1. 问题 大家在用Linux写程序时,大家会使用Linux gcc编译器中的头文件curse.h.但往往一般的发行版中都没有默认安装这个头文件,需要大家自行安装.最近遇到这个问题,如下: Red  ...

  8. python 3 并发编程多进程 paramiko 模块

    python 3 paramiko模块 paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,值得一说的是,fabric和ansible内部的远程管理就是使用的pa ...

  9. Never Go Away

    Hey if you ever want to leave it allif you ever want to lose control leave it all escape so far away ...

  10. python内置方法补充any

    any(iterable) 版本:该函数适用于2.5以上版本,兼容python3版本. 说明:如果iterable的任何元素不为0.''.False,all(iterable)返回True.如果ite ...