QDUOJ LC的课后辅导 单调递增栈
LC的课后辅导
发布时间: 2015年9月19日 21:42 时间限制: 1000ms 内存限制: 256M
有一天,LC给我们出了一道题,如图:

这个图形从左到右由若干个 宽为1 高不确定 的小矩形构成,求出这个图形所包含的最大矩形面积。
多组测试数据 每组测试数据的第一行为n(0 <= n <= 100), 表示图形有n个小矩形构成 接下来一行输入n个整数h1, h2...hn(0 <= hi <= 1000), 表示每个小矩形的高度 n为0时程序结束
仅输出一行表示面积的最大值
7
2 1 4 5 1 3 3
4
1000 1000 1000 1000
0
8
4000
思路:开两个数组分别记录每一个矩形以他为中心所能达到的左右长度,然后面积就是h*(r-l+);这里要注意的是如果该矩形比上一个或后一个矩形要小,则上一个矩形所能达到的区间,该矩形一定可以达到,
ac代码:
#include<stdio.h>
int main()
{ int a[];
int n,max,i;
while(scanf("%d",&n)!=EOF)
{
if(n==)
break;
for(i=;i<=n;i++)
scanf("%d",&a[i]);
int l[],r[];
l[]=;
r[n]=n;
int t;
for(i=;i<=n;i++)
{ t=i;
while(t>&&a[i]<=a[t-])
t=l[t-];
l[i]=t;
}
for(i=n-;i>=;i--)
{ t=i;
while(t<n&&a[i]<=a[t+])
t=r[t+];
r[i]=t;
}
int max=-;
for(i=;i<=n;i++)
{ if((r[i]-l[i]+)*a[i]>max)
max=(r[i]-l[i]+)*a[i];
}
printf("%d\n",max);}
return ;
} 最近在接触单调栈,又用栈实现了一下,这里维护一个单增栈,那么如果要进栈的数不能直接入栈,说明当前栈顶比他大,就说明它可以延伸,一直到可以进栈为止,也就是说通过维护单增栈我们一定可以找到左面第一个比他小的和右面第一个比他小的; 还有这里因为矩形的高度可能相同,所以当栈为空时说明可以延伸到头或者尾; #include<stdio.h>
#include<string.h>
#include<algorithm>
#include<stack>
#define N 100010
using namespace std;
int a[N],l[N],r[N];
int main()
{ int n,i;
while(scanf("%d",&n)!=EOF){
if(n==)
break;
stack<long long >st;
while(!st.empty())
st.pop();
l[]=;
st.push();
for(i=;i<=n;i++)
scanf("%d",&a[i]);
for(i=;i<=n;i++)
{
if(a[st.top()]>=a[i])
{ while(!st.empty()&&a[st.top()]>=a[i])
{
st.pop();
}
if(st.empty())
l[i]=;
else
l[i]=st.top()+;
st.push(i);
}
else
{ l[i]=i;
st.push(i);
} }
while(!st.empty())
st.pop();
r[n]=n;
st.push(n);
for(i=n;i>=;i--)
{
if(a[st.top()]>=a[i])
{ while(!st.empty()&&a[st.top()]>=a[i])
{
st.pop();
}
if(st.empty())
r[i]=n;
else
r[i]=st.top()-;
st.push(i);
}
else
{
r[i]=i;
st.push(i);
} }
//for(i=1;i<=n;i++)
//printf("%d %d\n",l[i],r[i]);
long long ans=;
for(i=;i<=n;i++)
ans=max(ans,(long long)(r[i]-l[i]+)*a[i]);
printf("%lld\n",ans);
}
return ;
}
QDUOJ LC的课后辅导 单调递增栈的更多相关文章
- qduoj LC的课后辅导
描述 有一天,LC给我们出了一道题,如图: 这个图形从左到右由若干个 宽为1 高不确定 的小矩形构成,求出这个图形所包含的最大矩形面积. 输入 多组测试数据每组测试数据的第一行为n(0 <= n ...
- POJ - 2796 Feel Good 单调递增栈+前缀和
Feel Good Bill is developing a new mathematical theory for human emotions. His recent investigations ...
- nyoj 单调递增子序列(二)
单调递增子序列(二) 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给定一整型数列{a1,a2...,an}(0<n<=100000),找出单调递增最长 ...
- HD1160FatMouse's Speed(最长单调递增子序列)
FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- 最长递增子序列问题 nyoj 17单调递增最长子序列 nyoj 79拦截导弹
一, 最长递增子序列问题的描述 设L=<a1,a2,…,an>是n个不同的实数的序列,L的递增子序列是这样一个子序列Lin=<aK1,ak2,…,akm>,其中k1< ...
- 【LCS,LIS】最长公共子序列、单调递增最长子序列
单调递增最长子序列 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 求一个字符串的最长递增子序列的长度如:dabdbf最长递增子序列就是abdf,长度为4 输入 ...
- nyoj 17 单调递增最长子序列
单调递增最长子序列 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 求一个字符串的最长递增子序列的长度如:dabdbf最长递增子序列就是abdf,长度为4 输入 ...
- NYOJ17,单调递增最长子序列
单调递增最长子序列 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描写叙述 求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf.长度为4 输入 第 ...
- [LeetCode] Monotone Increasing Digits 单调递增数字
Given a non-negative integer N, find the largest number that is less than or equal to N with monoton ...
随机推荐
- mysql 数据类型+约束+关联
1.什么是存储引擎存储引擎就是表的类型,针对不同的存储引擎,mysql会有不同的处理逻辑 2.存储引擎介绍InnoDB| DEFAULT | Supports transactions, row-le ...
- 图像处理之滤波---gabor
http://blog.csdn.net/xiaowei_cqu/article/details/24745945 小魏北大
- commons io上传文件
习惯了是用框架后,上传功能MVC框架基本都提供了.如struts2,springmvc! 可是假设项目中没有使用框架.而是单纯的使用jsp或servlet作为action,这时我们就能够使用commo ...
- IOS8 TouchID使用介绍
本文转载至 http://blog.csdn.net/jinkaiouyang/article/details/35555123 IOS8将指纹识别技术开放出来了.我们能够利用用户设置的touch I ...
- GCJ Qualification Round 2016 C题
题意是给定了一个叫“jamcoin”的定义,让你生成足够数量满足条件的jamcoin. jamcoin其实就可以理解成一个二进制整数,题目要求的要么长度为16位,要么为32位,一头一尾两个位必须是1, ...
- javaweb开发之jsp
一.WEB应用的目录结构 通常我们是在IDE中创建web应用程序,IDE自动为我们实现了WEB的目录结构,下面来看如何徒手创建一个WEB程序. 首先来看一下Tomcat自带的一个web应用的目录结构 ...
- Mall电商项目总结(二)——nginx负载均衡配置和策略
1. nginx配置文件 用户在浏览器上输入,http://www.xwld.site/ 实际上是在访问服务器80端口,nginx 监听80端口,将用户的请求转发到8080和9080端口 . upst ...
- 'gbk' codec can't encode character '\xa5' in position 4546: illegal multibyte sequence错误解决
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='gb18030') 原文 http://blog.csdn.net/jim7424 ...
- Entityframework连接Mysql遇到的问题
1.mysql.data.entity的版本一定要与mysql-connector-net的版本保持一致,我用的版本是6.9.12 2.有时会遇到连接MySQL数据库时提示missing server ...
- WPF Combo box 获取选择的Tag
string str1 = ((ComboBoxItem)this.cboBoxRate1553B.Items[this.cboBoxRate1553B.SelectedIndex]).Tag.ToS ...