随笔分类 -  Ⅱ.数据结构__单调栈

摘要:前言 在C++中,我们使用类定义自己得数据类型/通过定义新的类型来反应待解决的题的各种概念,是我们更容易编写、调试和修改程序。 我们需要主要关注数据抽象的重要性。数据抽象能帮助我们将对象的具体实现与对象能执行的操作分离开来 类的基本思想是数据抽象和封装。 数据抽象是依赖接口和实现分离的编程&&设计技 阅读全文
posted @ 2020-03-08 22:34 sparkyen 阅读(85) 评论(0) 推荐(0) 编辑
摘要:题意 给定两个$n$个元素的数组$a,b$,它们的前$p$个元素构成的数组是“等价”的,求$p$的最大值。“等价”的意思是在其任意一个子区间内的最小值相同。 $[link]$ 分析 这题有两种做法,笛卡尔树和单调栈,这里暂且只介绍单调栈的做法。 我们先假设$p=i$成立,考虑新加进来的$i+1$,如 阅读全文
posted @ 2019-09-27 21:41 sparkyen 阅读(124) 评论(0) 推荐(0) 编辑
摘要:题意:给出由01组成的矩阵,求求全是1的次大子矩阵。 思路: 单调栈 全是1的最大子矩阵的变形,不能直接把所有的面积存起来然后排序取第二大的,因为次大子矩阵可能在最大子矩阵里面,比如: 1 0 0 1 1 1 1 1 1 有篇博主的代码细节处理的很好,由于矩阵每行的长度一致,则不必重复在数组末尾标记 阅读全文
posted @ 2019-08-11 17:47 sparkyen 阅读(146) 评论(0) 推荐(0) 编辑
摘要:>传送门< 题意:给你一个01矩阵,求出所有不可扩大的全为1的矩阵的个数 思路:比赛的时候想到了用单调栈,但是也只是想到了,并不知道怎么用,其实和之前求二维01矩阵中全为1的矩阵最大面积非常相像。 像到什么地步呢!!你想一个不能扩大的矩阵,也即是说不能向左右扩展,也不能向上扩展,那我们就用单调栈维护 阅读全文
posted @ 2019-08-11 17:38 sparkyen 阅读(128) 评论(0) 推荐(0) 编辑
摘要:最近打了三场比赛疯狂碰到单调栈和单调队列的题目,第一,二两场每场各一个单调栈,第三场就碰到单调队列了。于是乎就查各种博客,找单调栈,单调队列的模板题去做,搞着搞着发现其实这两个其实是一回事,只不过利用了容器内元素单调的不同特性,用来加速处理不同的问题。 单调栈解决的是以某个值为最小(最大)值的最大区 阅读全文
posted @ 2019-07-26 17:11 sparkyen 阅读(210) 评论(0) 推荐(1) 编辑
摘要:单调栈,顾名思义,是栈内元素保持一定单调性(单调递增或单调递减)的栈。这里的单调递增或递减是指的从栈顶到栈底单调递增或递减。既然是栈,就满足后进先出的特点。 应用 用于解决的问题: 可以获取左边第一个或者右边第一个比当前位大或者小的数。 具体表现为: 1.最基础的应用就是给定一组数,针对每个数,寻找 阅读全文
posted @ 2019-07-25 11:22 sparkyen 阅读(399) 评论(0) 推荐(1) 编辑
摘要:Largest Rectangle in a Histogram http://poj.org/problem?id=2559 题意:给出若干宽度相同的矩形的高度(条形统计图),求最大子矩形面积 解题思路 单调栈的经典题(嫌弃字多可以先看后面的示例再来看这个思路) 显然,最终的子矩形高度一定和某一个 阅读全文
posted @ 2019-07-23 15:32 sparkyen 阅读(306) 评论(0) 推荐(1) 编辑