随笔分类 - 数据结构 - 栈
摘要:题目大意:给定一个长度为 N 的序列,定义连续区间 [l, r] 为:序列的一段子区间,满足 [l, r] 中的元素从小到大排序后,任意相邻两项的差值不超过1。求一共有多少个连续区间。 题解:单调栈 + 线段树 首先,对于区间计数类问题常规的思路是枚举区间的左端点或右端点,统计以该点为端点的区间个数
        阅读全文
                
摘要:题目大意:给定一个长度为 N 的序列,每次可以合并相邻的两个元素,代价是两者中较大的值,合并之后的值也为两者较大的值,求合并 N 1 次后的最小代价是多少。 题解: 除了最大值以外,每个值均只会被合并一次,合并的代价一定是这个值左边最大值和右边最大值中较小的那一个。问题转化成了如何求解每个元素左边和
        阅读全文
                
摘要:题目大意:给定 N 个数,编号从 1 到 N,现需要判断,利用一个无限大的栈结构,能否实现到给定序列的转换。 题解:本题一共涉及三个部分的交互,分别是目标序列,栈和初始序列,由栈的顶端进入,顶端弹出性质可知,问题转化成目标序列的当前元素,栈顶元素和初始序列的当前元素之间可能情况的讨论。 代码如下 c
        阅读全文
                
摘要:题目大意:给定一个长度为 N 的序列,定义两个数 $a[i],a[j]$ 相互看得见,意味着 $\forall k\in [i+1,j 1],a[k]\le a[i],a[k]\le a[j]$,求序列中共有多少对数可以看得见。 题解:将序列得每一个值面向左边排序,从左到右扫每一个数,为了避免重复计
        阅读全文
                
摘要:题目大意:给定一个长度为 N 的序列,求任意区间 [ l , r ] 中最小的$min\{v[i],i\in[l,r] \} \Sigma_{i=l}^rv[i]$。 题解:这是一道具有标准单调栈特征的问题,即:区间最小值贡献类问题。直接枚举每个点为最小值时用单调栈求出左右最远的延伸距离,并利用前缀
        阅读全文
                
摘要:题目大意:给定一个由 N 个数组成的序列,求以每个序列为基准,向右最大有多少个数字都比它小。 单调栈 1. 单调栈中维护的是数组的下标。 2. 单调栈在 每个元素出栈 时统计 该出栈元素 的答案贡献或对应的值。 3. 单调栈主要应用于区间最值的贡献问题。 代码如下
        阅读全文
                
摘要:悬线法是一种更优秀的枚举方式,保证了枚举悬线的集合包含了极大子矩形所在的集合,而且由最大子矩形一定是极大子矩形的定理可知,这种枚举方式可以求出最大子矩形。 具体做法是维护矩形中每个元素对应最近的左边和右边的障碍点,再维护一个高度数组记录下每个点向上可以延伸多高,还有对应的矩形向左向右可以到达的最大宽
        阅读全文
                

 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号