poj 2559 Largest Rectangle in a Histogram - 单调栈
| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 19782 | Accepted: 6393 |
Description

Usually, histograms are used to represent discrete distributions, e.g., the frequencies of characters in texts. Note that the order of the rectangles, i.e., their heights, is important. Calculate the area of the largest rectangle in a histogram that is aligned at the common base line, too. The figure on the right shows the largest aligned rectangle for the depicted histogram.
Input
Output
Sample Input
7 2 1 4 5 1 3 3
4 1000 1000 1000 1000
0
Sample Output
8
4000
Hint
/*/
大二这学期开学真是忙爆了。作为一个班干部,天哪。。 好久没有刷题了,想起以前听了岛娘的一节课,单调栈,好像有点似懂非懂,于是抽时间看了一下,总算是搞通了。。。 将读入的数据一个个压栈,奖数据与栈顶进行比较大小,如果这个数比栈顶小,就计算以站顶为高的最大矩形的大小,弹出栈顶。如果这个数比栈顶大,直接就压进栈。这样一系列操作之后,就会发现栈里面剩下一个递增数列,用一个pair来保存此时栈高度和前面达到这个高度的个数,然后按照前面的思想去计算每一个高度最大矩形面积是多大。

AC代码:
/*/
#include "stdio.h"
#include "string.h"
#include "stack"
#include "algorithm"
using namespace std;
typedef long long LL;
typedef pair<LL,LL> PII;
const LL MX = 1e5 + 5;
int main() {
LL n,h;
while(~scanf("%lld",&n)) {
if(n==0)break;
stack<PII> Q;
while(!Q.empty()) {
Q.pop();
}
LL ans=0;
for(LL i=0; i<n; i++) {
scanf("%lld",&h);
LL Now_Big_W=0;
while(!Q.empty() && Q.top().first >= h ) {
LL H = Q.top().first;
LL W = Q.top().second;
Q.pop();
Now_Big_W+=W;
ans=max(ans,H*Now_Big_W);
}
Q.push(PII(h,Now_Big_W+1));
}
LL The_number_W=0;
while(!Q.empty()){
The_number_W+=Q.top().second;
ans=max(ans,Q.top().first*The_number_W);
Q.pop();
}
printf("%lld\n",ans);
}
return 0;
}
poj 2559 Largest Rectangle in a Histogram - 单调栈的更多相关文章
- POJ 2559 Largest Rectangle in a Histogram(单调栈)
传送门 Description A histogram is a polygon composed of a sequence of rectangles aligned at a common ba ...
- POJ 2559 Largest Rectangle in a Histogram (单调栈或者dp)
Largest Rectangle in a Histogram Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 15831 ...
- PKU 2559 Largest Rectangle in a Histogram(单调栈)
题目大意:原题链接 一排紧密相连的矩形,求能构成的最大矩形面积. 为了防止栈为空,所以提前加入元素(-1,0) #include<cstdio> #include<stack> ...
- [POJ 2559]Largest Rectangle in a Histogram 题解(单调栈)
[POJ 2559]Largest Rectangle in a Histogram Description A histogram is a polygon composed of a sequen ...
- stack(数组模拟) POJ 2559 Largest Rectangle in a Histogram
题目传送门 /* 题意:宽度为1,高度不等,求最大矩形面积 stack(数组模拟):对于每个a[i]有L[i],R[i]坐标位置 表示a[L[i]] < a[i] < a[R[i]] 的极 ...
- poj 2559 Largest Rectangle in a Histogram 栈
// poj 2559 Largest Rectangle in a Histogram 栈 // // n个矩形排在一块,不同的高度,让你求最大的矩形的面积(矩形紧挨在一起) // // 这道题用的 ...
- poj 2559 Largest Rectangle in a Histogram (单调栈)
http://poj.org/problem?id=2559 Largest Rectangle in a Histogram Time Limit: 1000MS Memory Limit: 6 ...
- POJ2559 Largest Rectangle in a Histogram —— 单调栈
题目链接:http://poj.org/problem?id=2559 Largest Rectangle in a Histogram Time Limit: 1000MS Memory Lim ...
- 题解报告:poj 2559 Largest Rectangle in a Histogram(单调栈)
Description A histogram is a polygon composed of a sequence of rectangles aligned at a common base l ...
随机推荐
- js中bind,call,apply方法的应用
最近用js的类写东西,发现一个无比蛋疼的事,那就是封装的类方法中的this指针经常会改变指向,失去上下文,导致程序错误或崩溃. 比如: function Obj(){ this.type = &quo ...
- bootstrap 布局(收藏/摘抄)
bootstrap 12栅格 布局
- 已安装php 编译安装 gd库拓展模块
参考资料:http://wenku.baidu.com/link?url=EgXFShYxeJOZSYNQ_7RCBC-6X8OcRRCqVm4qCv49uBk57d6vLBoUpfYdQ-KqJRs ...
- PHP 文件夹操作「复制、删除、查看大小」迭代实现
"既然递归能很好的解决,为什么还要用迭代呢"?主要的原因还是效率问题-- 递归的概念是函数调用自身,把一个复杂的问题分解成与其相似的多个子问题来解决,可以极大的减少代码量,使得程序 ...
- 使用KRPano资源分析工具解密被加密的XML
软件交流群:571171251(软件免费版本在群内提供) krpano技术交流群:551278936(软件免费版本在群内提供) 最新博客地址:blog.turenlong.com 限时下载地址:htt ...
- NET 自带IOC容器MEF指初体验
转自:http://www.cnblogs.com/ulex/p/4186881.html IOC容器:工具较多,大体功能都相同,大都需要事先对接口与实现进行配对(通过代码或配置文件),然后由系统自动 ...
- phpstudy 80端口被占用,修改端口
搭建mantis,总会出现80端口被占用的情况.看到别的步骤是:1.cmd 运行netstat -ano查看80端口被什么占用,然后在任务管理器找到对应的结束进程.通常情况下是被System占用,右击 ...
- iOS 事件传递(Touch事件)
先总说如下: 1.当手指触摸到屏幕时,会产生UITouch对象和UIEvent对象. 2.这两个对象产生后会被传递到UIApplication管理的一个事件队列中. 3.再有UIApplication ...
- linux commands
abrt-cli --since ;查看abrt捕捉的异常 alias ;别名,alias rm='rm -i':使用“ \rm ” 使用原命令 alsamixer ;图形音量调节,q 增加左声道, ...
- Jquery操作select
<select id="Select1"> <option value="one">一</option> <optio ...