题目

Largest Rectangle in a Histogram

思路

单调栈。

不知道怎么描述所以用样例讲一下。

7 2 1 4 5 1 3 3
最大矩形的高度一定是给你的高度中的一个。
我们枚举最大高度。
很明显以某一高度为高的矩形的左边界是该高度左边第一个比它矮的。
右边界类似。

我们可以用单调栈去维护每一个高度左右第一个比他矮的位置即可

\(Code\)

#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<stack>
#include<algorithm>
#define max(a,b) a>b?a:b
#define MAXN 100001 typedef long long ll; inline void read(ll &T) {
ll x=0;bool f=0;char c=getchar();
while(c<'0'||c>'9'){if(c=='-')f=!f;c=getchar();}
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
T=f?-x:x;
} inline void write(ll x) {
if(x<0) putchar('-'),write(-x);
else {
if(x/10) write(x/10);
putchar(x%10+'0');
}
} ll n;
int l[MAXN],r[MAXN];
struct node {
ll w,num;
}a[MAXN];
std::stack<node> sss; signed main() {
while(1) {
ll maxx=0;
read(n);if(n==0) break;
for(int i=1;i<=n;++i) {
read(a[i].w);a[i].num=i;
}
for(int i=1;i<=n;++i) {
if(sss.empty()) {l[i]=0;sss.push(a[i]);continue;}
node x=sss.top();
while(x.w>=a[i].w) {
sss.pop();
if(sss.empty()) break;
x=sss.top();
}
if(sss.empty()) l[i]=0;
else l[i]=sss.top().num;
sss.push(a[i]);
}
while(!sss.empty()) sss.pop();
for(int i=n;i>=1;--i) {
if(sss.empty()) {r[i]=n+1;sss.push(a[i]);continue;}
node x=sss.top();
while(x.w>=a[i].w) {
sss.pop();
if(sss.empty()) break;
x=sss.top();
}
if(sss.empty()) r[i]=n+1;
else r[i]=sss.top().num;
sss.push(a[i]);
}
for(int i=1;i<=n;++i) {
ll qwq=a[i].w*1ll*(r[i]-l[i]-1);
maxx=max(maxx,qwq);
}
while(!sss.empty()) sss.pop();
write(maxx);puts("");
}
return 0;
}

【题解】hdu1506 Largest Rectangle in a Histogram的更多相关文章

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

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

  2. hdu1506 Largest Rectangle in a Histogram

    Problem Description A histogram is a polygon composed of a sequence of rectangles aligned at a commo ...

  3. hdu---1506(Largest Rectangle in a Histogram/dp最大子矩阵)

    Largest Rectangle in a Histogram Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  4. hdu1506——Largest Rectangle in a Histogram

    Largest Rectangle in a Histogram Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  5. HDU1506 Largest Rectangle in a Histogram (动规)

    Largest Rectangle in a Histogram Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

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

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

  7. HDU-1506 Largest Rectangle in a Histogram【单调栈】

    Description A histogram is a polygon composed of a sequence of rectangles aligned at a common base l ...

  8. HDU1506 ( Largest Rectangle in a Histogram ) [dp]

    近期情绪太不稳定了.可能是由于在找实习这个过程碰壁了吧.第一次面试就跪了,可能是我面的是一个新公司,制度不完好,我感觉整个面试过程全然不沾编程,我面试的还是软件开发-后来我同学面试的时候.说是有一道数 ...

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

    单调栈的介绍及一些基本性质 http://blog.csdn.net/liujian20150808/article/details/50752861 依次把矩形塞进单调栈,保持其单增,矩形中的元素是 ...

随机推荐

  1. 配置 SSL、TLS 以及 HTTPS 来确保 Elasticsearch、Kibana、Beats 和 Logstash 的安全

    配置主机hosts文件 192.168.75.20 filebeat.local kibana.local logstash.local 192.168.75.22 node2.elastic.tes ...

  2. Java反射复习

    三种实例化对象: 1.Class<?> cls = Class.forName("java.util.Date") ; *** System.out.println(c ...

  3. sql server: 数据库备份时出现-operating-system-error-5拒绝访问

    本文转自:https://blog.csdn.net/ibsfn/article/details/80770855 sql-server 数据库备份时出现-operating-system-error ...

  4. 使用Docker之容器的创建、删除

    假设我们现在拥有以下镜像 1:启动一个简单容器 docker container run        //用于启动一个容器 -it   //是容器具有交互性,并与终端进行连接 命令:docker c ...

  5. Linux命令2

    http://note.youdao.com/noteshare?id=172b36da28e63a528f2cb70fb7d9ea96 http://note.youdao.com/noteshar ...

  6. 如何从ubuntu或PC传递文件到板子,ubuntu如何上网?

    3.3 如何从ubuntu或PC传递文件到板子,ubuntu如何上网? 答:以下将分别介绍如何在ubuntu和windows下如何传递文件. ubuntu如何配置上网?ubuntu 上网:打开Orac ...

  7. javascript获取url中的参数值

    javascript的实现代码如下: function QueryString(fieldName) { var urlString = document.location.search; if(ur ...

  8. MUI下拉菜单样式

    <div class="mui-input-row my_select"> <label style="width: 47px;padding-righ ...

  9. js中的原型,原型链和继承

    在传统的基于Class的语言如Java.C++中,继承的本质是扩展一个已有的Class,并生成新的Subclass. 由于这类语言严格区分类和实例,继承实际上是类型的扩展.但是,JavaScript最 ...

  10. pgsql主备搭建及切换

    二.主从搭建 2.1测试目标 测试postgresql主从搭建安装过程 2.2环境准备 实例级别的复制 流复制主库可读写,但从库只允许查询不允许写人, 而逻辑复制的从库可读写 流复制实验环境 主机 主 ...