hdu1506单调栈的宽度
很好的题目,单调栈上的宽度如何求
题解:https://blog.csdn.net/baidu_35643793/article/details/64440095
单调队列和单调栈都是去除没有用的数据,对于本题来说,当一个高度小于前面高度时,那么前面的高度就没用了,因为此时后面柱体宽度拓展的限制条件就是当前高度较小的柱体,而当前柱体只要将之前柱体的宽度吸收进来即可
从左到右遍历每个元素,元素可以向左边扩展到第一个比其低的数,也可以向右扩展到第一个比其低的数,现在让元素入单调栈,栈顶元素大于栈底元素。元素的左宽度在其入栈时求出,是最后一个出栈元素的宽度+1
每个元素在入栈弹出栈内元素的过程中,都可以求出出栈元素的右宽度,是其前面出站元素的左宽度的总和
- /*
- 单调栈:每个元素在入栈时可以的到其左侧可以拓展的宽度,在出站时可以得到其右侧可以拓展的宽度
- 用两个栈记录下标和左侧宽度
- */
- #include<bits/stdc++.h>
- using namespace std;
- #define maxn 100005
- #define ll long long
- int q[maxn],w[maxn],h,n;
- int main(){
- while(scanf("%d",&n),n){
- memset(q,-,sizeof q);
- int top=;
- ll ans=;
- for(int i=;i<=n+;i++){
- if(i!=n+) scanf("%d",&h);
- else h=;
- if(h>q[top]) q[++top]=h,w[top]=;
- else {
- ll cnt=;
- while(h<=q[top]){
- ans=max(ans,(w[top]+cnt)*q[top]);
- cnt=cnt+w[top--];//出栈元素的左宽不断累加就是栈顶元素的右宽
- }
- q[++top]=h;
- w[top]=cnt+;//新入栈的元素左宽是最后一个出队元素总宽+1
- }
- }
- printf("%lld\n",ans);
- }
- return ;
- }
hdu1506单调栈的宽度的更多相关文章
- HDU1506(单调栈或者DP) 分类: 数据结构 2015-07-07 23:23 2人阅读 评论(0) 收藏
Largest Rectangle in a Histogram Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 ...
- poj2559/hdu1506 单调栈经典题
我实在是太菜了啊啊啊啊啊 到现在连个单调栈都不会啊啊啊 写个经典题 #include<cstdio> #include<algorithm> #include<cstri ...
- hdu1506 直方图中最大的矩形 单调栈入门
hdu1506 直方图中最大的矩形 单调栈入门 直方图是由在公共基线对齐的矩形序列组成的多边形.矩形具有相同的宽度,但可能具有不同的高度.例如,左侧的数字显示了由高度为2,1,4,5,1,3,3的矩形 ...
- 【单调栈】hdu1506 Largest Rectangle in a Histogram
单调栈的介绍及一些基本性质 http://blog.csdn.net/liujian20150808/article/details/50752861 依次把矩形塞进单调栈,保持其单增,矩形中的元素是 ...
- 51nod 1215 数组的宽度&poj 2796 Feel Good(单调栈)
单调栈求每个数在哪些区间是最值的经典操作. 把数一个一个丢进单调栈,弹出的时候[st[top-1]+1,i-1]这段区间就是弹出的数为最值的区间. poj2796 弹出的时候更新答案即可 #inclu ...
- Largest Rectangle in a Histogram(hdu1506,单调栈裸题)
Largest Rectangle in a Histogram Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 ...
- 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 ...
- poj 2559 Largest Rectangle in a Histogram (单调栈)
http://poj.org/problem?id=2559 Largest Rectangle in a Histogram Time Limit: 1000MS Memory Limit: 6 ...
- Codeforces548D:Mike and Feet(单调栈)
Mike is the president of country What-The-Fatherland. There are n bears living in this country besid ...
随机推荐
- P2885 [USACO07NOV]电话线Telephone Wire
P2885 [USACO07NOV]电话线Telephone Wire 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务于是,她们要求FJ把那些老旧的电话线换成性能更好的新电话 ...
- nginx错误集合
遇到 nginx: [warn] server name "http://127.0.0.1" has suspicious symbols in D:\nginx-1.12.1/ ...
- 版本管理——git
一.git简介 git是一个 分布式版本控制系统 ,学习git之前首先要了解什么是分布式版本控制系统. 集中式版本控制:版本库集中存放在中央服务器,我们工作的时候先从中央服务器获取最新版本,干完活后把 ...
- JAVA-大白话探索JVM-类加载过程(二)
首先我们知道JVM是什么以及类加载器的作用 不清楚的可以看看JAVA-大白话探索JVM-类加载器(一) 现在我们来摸索下类的加载过程 首先,我们将类加载过程分为三步走 装载 链接 初始化 其中 链接 ...
- CentOS6.x下,tomcat - web项目部署
1. 安装tomcat tomcat安装方法:http://www.cnblogs.com/vurtne-lu/p/6478440.html 2. 配置tomcat 修改server.xml文件 &l ...
- C语言实现二叉树的建立、遍历以及表达式的计算
实现代码 #include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <ctype ...
- DNS缓存欺骗攻击
1.受影响的无线网络设备 一些D-link.TP-Link.Belkin.Linksys及IPTime等品牌无线路由器存在安全隐患. 2.漏洞描述 攻击者向DNS服务器注入非法网络域名地址,如果服务器 ...
- android 短信拦截
android 4+版本需要用户主动添加broadReceiver 1.清单文件 <manifest xmlns:android="http://schemas.android.com ...
- 数据库之MySQL ERROR 1698 (28000) 错误:Access denied for user 'root'@'localhost'" error【摘抄】
声明:全文均摘抄于MySQL ERROR 1698 (28000) 错误 //错误起源: ~$ mysql -u root -p Enter password: ERROR 1698 (28000): ...
- 【IT界的厨子】酱香鲈鱼
食材: 前世曾经回眸的鲈鱼一条(主要选刺少的鱼,适合孩子吃,大人吃随意,草鱼比较大) 五花肉少许(肥一些的) 豆腐 辅料: 葱姜 蒜(选) 大料 香菜 调味: 啤酒(两罐) 黄豆酱或豆瓣酱(选) 老抽 ...