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 ...
随机推荐
- SEO(搜索引擎优化)
高级搜索指令 搜索命令中的字符均为英文 用户除了可以通过搜索引擎搜索普通的查询词外,还可以使用一些特殊的高级搜索指令.这些指令普通用户很少会用到,但是对于SEO人员进行竞争对手研究和寻找外部链接资源却 ...
- kubernetes对象之Ingress
系列目录 概述 向外网暴露集群内服务,以使客户端能够访问,有以下几种方法,本文重点描述Ingress. LoadBalancer LoadBalancer一般由云服务供应商提供或者用户自定义,运行在集 ...
- # kubernetes调度之nodeName与NodeSelector
系列目录 Kubernetes的调度有简单,有复杂,指定NodeName和使用NodeSelector调度是最简单的,可以将Pod调度到期望的节点上. 本文主要介绍kubernetes调度框架中的No ...
- sublime 实用快捷键
Command+Enter 在下一行插入新行.举个栗子:即使光标不在行尾,也能快速向下插入一行. Command+Shift+Enter 在上一行插入新行.举个栗子:即使光标不在行首,也能快速向上插入 ...
- STL源代码剖析——基本算法stl_algobase.h
前言 在STL中.算法是常常被使用的,算法在整个STL中起到很关键的数据.本节介绍的是一些基本算法,包括equal.fill.fill_n,iter_swap.lexicographical_comp ...
- Java8新特性(一)概览
最近看了好几段Java代码和以往的风格很不一样,都有点不太适应了,后来一查原来是Java8的新特性. 为了保持对技术的敏感性(面试...),这里我们一起来学习下Java8的新特性. 如果从技术角度来看 ...
- 怎样高速编译mediatek\operator以下代码
mediatek\operator以下有单独的apk.也有overlay的数据,单独的apk会配置anroid.mk,找到相应的路径直接build. 假设是overlay,则编译原来应用的路径,比如 ...
- 【原创】Sublime Text 3快捷配置c++的编译,运行,gdb环境
打开Tools ->Build System -> New Build System 弹出一个文件,将原有的东西删掉,输入: { "encoding": "u ...
- 时间操作(Java版)—获取给定日期N天后的日期
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/wangshuxuncom/article/details/34896777 获取给定 ...
- linux杂谈(十四):ftp的企业应用级的配置(一)
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/linux_player_c/article/details/24869877 1.ftp简单介绍 ( ...