1.什么是单调栈

  • 具有单调性和栈的性质
  • 单调递减栈就是从栈底到栈顶是单调递减的
  • 单调递增栈就是从栈底到栈顶是单调递增的

2.单调栈解决的问题

  • 以自己为最小值,找到最长的区间;单调递增栈
  • 以自己为最大值,找到最长的区间;单调递减栈
  • 给定一个区间找到这个区间的最大值或最小值

3.单调递减栈的性质

  • 对于第一个出栈的元素,它的右宽一定为0
  • 对于第二个出栈的元素,它的右宽为第一个出栈元素的总宽
  • 对于第三个出栈的元素,它的右宽为第二个出栈元素的总宽
  • 。。。。。。。。
  • 直到栈顶元素小于自己,才可以入栈;
  • 入栈元素的左宽为上次出栈元素的总宽+1(自身);若无出栈元素,则左宽为1(自身)
  • 最后将栈中所有元素出栈,考虑所有情况

(左宽就是左边比自己小的元素个数,右宽就是右边比自己小的元素的个数)

4.以下面数据模拟一下单调递减栈的操作

  1. 1入栈,无出栈元素,左宽为1;
  2. 5入栈,无出栈元素,左宽为1;
  3. 5出栈,第一个出栈右宽为0;
  4. 4入栈,左宽为上个出栈元素的总宽+1=2;
  5. 8入栈,无出栈元素,左宽为1;
  6. 8出栈,第一个出栈,右宽为0;
  7. 6入栈,左宽为上个出栈的总宽+1;
  8. 7入栈,无出栈元素,左宽为1;
  9. 7出栈,第一个出栈,右宽为0;
  10. 6出栈,第二个出栈,右宽为上个元素的总宽:1;
  11. 4出栈,第三个出栈,右宽为上个元素的总宽:3;
  12. 3入栈,左宽为上个出栈的总宽+1:6;
  13. 3出栈,第一个出栈右宽为0;
  14. 2入栈,左宽为上一个出栈的总宽+1:7;
  15. //全部出栈:
  16. 2出栈,第一个出栈,右宽为0;
  17. 1出栈,第二个出栈的,右宽为上个出栈的总宽:7;

5. 单调栈的实现

hdu1506(单调递减栈)poj2339,hrbustoj 2326(需long long)

单调递减栈:如果是以各个元素为最大值找到最大区间的话  q[0]=inf, h=inf-1;

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
typedef long long ll;
//int a[maxn];
int q[maxn]={-1};
int w[maxn];//记录左宽,从这个点之前有多少个点的高度大于等于当前点的高度
int main()
{int n,h;while(scanf("%d",&n)&&n){int top=0;ll ans=0;for(int i=1;i<=n+1;i++){if(i!=n+1)scanf("%d",&h);elseh=0;//为了让所有元素出栈if(h>q[top])q[++top]=h,w[top]=1;else{ll cnt=0;  //第一个出栈的右宽为0;while(h<=q[top]){ans=max(ans,(w[top]+cnt)*q[top]);  //(左宽+右宽)*高度;cnt=cnt+w[top--];  //第(i>1)出栈的右宽为上一个的总宽;}//终于找到比自己小的数字了,可以入栈了,入栈会得到左宽,左宽为上一个出栈元素的总宽+1;q[++top]=h;w[top]=cnt+1;}}printf("%I64d\n",ans);}return 0;
}
//单调栈:从栈顶到栈底单调递减

HDU1506 / POJ2339 Largest Rectangle in a Histogram 单调递减栈相关推荐

  1. POJ2559 Largest Rectangle in a Histogram(单调栈)

    题意: 给出一组矩形的高,求最多能拼成矩形的最大面积,看图就很清楚了. 要点: 还是单调栈,现在有点感觉了,单调栈大概就是能求出当前值左右的比它大或小的数的范围.这题用高度作为单调栈,分别往左右找比当 ...

  2. poj 2559 Largest Rectangle in a Histogram 栈

    // poj 2559 Largest Rectangle in a Histogram 栈 // // n个矩形排在一块,不同的高度,让你求最大的矩形的面积(矩形紧挨在一起) // // 这道题用的 ...

  3. HDU 1506 Largest Rectangle in a Histogram(dp、单调栈)

    你是不是飘了?骚年! Problem Description A histogram is a polygon composed of a sequence of rectangles aligned ...

  4. Largest Rectangle in a Histogram (动态规划+奇思妙想单调栈)求最大矩状图面积

    感觉动态规划都是玄妙的很,思维题吧(单调栈思维) 题解:让求最大矩形面积,宽为1,暴力超时 可以发现   当第i-1个比第i个高的时候   比第i-1个高的所有也一定比第i个高 于是可以用到动态规划的 ...

  5. 【单调栈】Largest Rectangle in a Histogram(luogu-SP1805/poj 2559)

    Largest Rectangle in a Histogram luogu-SP1805 poj 2559 题目大意: 有n个并排的矩阵,高度为aia_iai​,宽度为1,现在让求包含于这些矩阵的并 ...

  6. 【Python CheckiO 题解】Largest Rectangle in a Histogram

    CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思 ...

  7. *【HDU - 1506】【POJ - 2559】Largest Rectangle in a Histogram(单调栈或动态规划)

    题干: Description A histogram is a polygon composed of a sequence of rectangles aligned at a common ba ...

  8. Largest Rectangle in a Histogram HDU - 1506 解题思路 单调栈

    原题目 Problem Description A histogram is a polygon composed of a sequence of rectangles aligned at a c ...

  9. hdu 1506 Largest Rectangle in a Histogram 最大矩形

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1506 Largest Rectangle in a Histogram Time Limit: 20 ...

最新文章

  1. c语言 求sin近似值,用泰勒公式求sin(x)的近似值
  2. 获取url的hash值
  3. Winform中使用控件的Dock属性设计窗体布局,使不随窗体缩放而改变
  4. ASP.NET Aries 入门开发教程4:查询区的下拉配置
  5. 长春市计算机学校老照片,松江这所学校一百年啦!一组老照片回忆曾经的旧时光…...
  6. Java寻找最大公约数
  7. [Golang] string类型和其他类型的值的互转
  8. django 1.8 官方文档翻译: 2-6-4 数据库访问优化
  9. java的oracle事务回滚_Oracle事务处理
  10. 带孩子们做环球旅行的读后感_孩子少言寡语、不爱说话怎么办?家长们可以这样做...
  11. 在matlab中进行遥感影像地理坐标的相互转换
  12. Android开发之蓝牙(Bluetooth)---源码目录
  13. NWT杂事:来公司只喝酒不谈工作
  14. Windows远程连接Linux虚拟机图形界面
  15. MapReduce项目案例3——温度统计
  16. [经验分享] 【统计小百科】你知道AIC准则么?
  17. [python爬虫] Selenium爬取新浪微博内容及用户信息
  18. Roman number -- 罗马数字
  19. 华为ac配置radius认证服务器_华为aaa配置 华为AAA认证典型配置举例 - 网络设备 - 服务器之家...
  20. 【Turtle表白合集】“海底月是天上月,眼前人是心上人。”余生多喜乐,长平安~(附3款源码)

热门文章

  1. LibreOJ 数列分块入门
  2. ThinkPHP5路由图解
  3. Java枚举enum以及应用:枚举实现单例模式
  4. 基于visual Studio2013解决C语言竞赛题之1089牛虎过河
  5. java取主机的网卡物理地址
  6. java的数组查找算法_java数组、排序算法、查找算法详解
  7. linux c编程头文件,如何在Linux中找到C编程语言的头文件?
  8. python里pai_关于python如何调用win32pai操作cmd的方法
  9. python的语言是什么歌_用python对歌词进行语言分析
  10. mybatis 时间_开发工具:Mybatis.Plus.插件三种方式的逆向工程