SUST OJ 1675: Fehead的项目(单调栈)
1675: Fehead的项目
时间限制: 1 Sec 内存限制: 128 MB
提交: 41 解决: 27
[提交][状态][讨论版]
题目描述
Fehead俱乐部接手了一个项目,为了统计数据,他们把这个项目做成了一个柱形统计图。对于这个柱形统计图,它的每个项目的宽度是1, 高度和具体问题有关。现在身为Fehead铁杆粉丝的你,帮忙编程求出在这个柱形图中的最大面积的矩形。
例如对于这三个矩形,阴影部分面积最大。EIP1OGVM0(YD132.png)
输入
有多组测试,每一组测试第一个数为N1<=N<=100000,代表N个矩形,接下来N个数分别代表这N个矩形的高度h。0<=hi<=1000000000。N为0结束测试。
输出
每一组测试输出能组成的最大矩形面积。
样例输入
7 1 1 4 6 1 2 3
4 2000 2000 2000 2000
0
样例输出
8
8000
用单调栈计算出每个数作为最小数向左和向右能延伸的最长距离。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1e6+10;
ll a[maxn],l[maxn],r[maxn];
ll st[maxn],top;
int main()
{
ll n,i;
while(cin>>n&&n)
{
for(i=1;i<=n;i++) cin>>a[i];
a[++n]=-1;
top=0;
for(i=1;i<=n;i++)
{
l[i]=r[i]=i;
while(top&&a[st[top]]>a[i])
{
l[i]=l[st[top]];
r[st[top]]=i-1;
top-=1;
}
if(top&&a[st[top]]==a[i]) l[i]=l[st[top]];
top+=1;
st[top]=i;
}
ll res=0;
for(i=1;i<n;i++)
{
res=max(res,(r[i]-l[i]+1)*a[i]);
}
cout<<res<<endl;
}
return 0;
}
SUST OJ 1675: Fehead的项目(单调栈)的更多相关文章
- 51nod 1102 面积最大的矩形 && 新疆大学OJ 1387: B.HUAWEI's billboard 【单调栈】+【拼凑段】(o(n) 或 o(nlog(n))
题面1:  题面2:  两道题除了数据范围不同,没有任何差异,两道题都可以o(n)(单调栈),o(nlog(n))(我自己的做法)解决. 解题思路1:(单调栈) 对于每个点找到右边第一个比它小的位 ...
- 翻转长方形 (不知名oj中一道个人私题)--单调栈维护最大子矩形
怎么分析这道题呢? 首先 ,我们注意到一点: 不管怎么操作,任意一个2*2方格中的 "#"个数的奇偶性是不变的. 所以,如果一个2*2方格中有奇数个"#",这个 ...
- poj 2559 Largest Rectangle in a Histogram (单调栈)
http://poj.org/problem?id=2559 Largest Rectangle in a Histogram Time Limit: 1000MS Memory Limit: 6 ...
- BZOJ1012: [JSOI2008]最大数maxnumber [线段树 | 单调栈+二分]
1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 8748 Solved: 3835[Submi ...
- BZOJ 4453: cys就是要拿英魂![后缀数组 ST表 单调栈类似物]
4453: cys就是要拿英魂! Time Limit: 3 Sec Memory Limit: 128 MBSubmit: 90 Solved: 46[Submit][Status][Discu ...
- BZOJ 3238: [Ahoi2013]差异 [后缀数组 单调栈]
3238: [Ahoi2013]差异 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 2326 Solved: 1054[Submit][Status ...
- poj 2559 Largest Rectangle in a Histogram - 单调栈
Largest Rectangle in a Histogram Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 19782 ...
- bzoj1510: [POI2006]Kra-The Disks(单调栈)
这道题可以O(n)解决,用二分还更慢一点 维护一个单调栈,模拟掉盘子的过程就行了 #include<stdio.h> #include<string.h> #include&l ...
- BZOJ1057[ZJOI2007]棋盘制作 [单调栈]
题目描述 国际象棋是世界上最古老的博弈游戏之一,和中国的围棋.象棋以及日本的将棋同享盛名.据说国际象棋起源于易经的思想,棋盘是一个8*8大小的黑白相间的方阵,对应八八六十四卦,黑白对应阴阳. 而我们的 ...
随机推荐
- [Java学习] Java super关键字
super 关键字与 this 类似,this 用来表示当前类的实例,super 用来表示父类. super 可以用在子类中,通过点号(.)来获取父类的成员变量和方法.super 也可以用在子类的子类 ...
- ccfZ字形扫描
问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan).给定一个n×n的矩阵,Z字形扫描的过程如下图所示: 对于下面的4×4的矩阵, 1 5 3 9 3 7 5 ...
- WaitForMultipleObjects用法详解
本文转载于:http://blog.csdn.net/sac761/article/details/52456385 WaitForMultipleObjects是Windows中的一个功能非常强大的 ...
- Leetcode 79
//这是我写过最难的递归了...//class Solution { public: bool exist(vector<vector<char>>& board, s ...
- POJ 1442 treap
裸treap. 只需增加一个size记录其儿子个数便可找到第k大数. #include <cstdio> #include <cstring> #include <cti ...
- vim 缩进设置
1.在自己的家目录(/home)下建立.vimrc文件.控制台输入vi ~/.vimrc 回车. 2.在.vimrc文件中输入如下文本: set tabstop=4 set softtabstop= ...
- PHP:第二章——PHP中的switch语句
<?php header("Content-Type:text/html;charset=utf-8"); /* switch语句: */ //例1: /*$i = 99; ...
- Tarjan 算法求强联通分量
转载自:http://blog.csdn.net/xinghongduo/article/details/6195337 还是没懂Tarjan算法的原理.但是感觉.讲的很有道理. 说到以Tarjan命 ...
- sgu 121. Bridges painting 列举情况 难度:1
121. Bridges painting time limit per test: 0.25 sec. memory limit per test: 4096 KB New Berland cons ...
- 开发工具之play framework
Play!是一个full-stack(全栈的)Java Web应用框架,包括一个简单的无 状态MVC模型,具有Hibernate的对象持续,一个基于Groovy的模板引擎,以及建立一个现代Web应 ...