[L3] 降维技巧
[L3] 降维技巧
一、单调性相关
双指针
-
双指针:是一种使用两个指针来维护一段序列区间的方法,可以解决涉及 “连续区间” 的寻找或统计。
-
核心原理:队列,右指针增加相当于入队,左指针增加相当于出队。
-
相关例题:P1638 逛画展 | P3143 钻石收藏家
单调栈
-
单调栈:是一种内部元素具有单调性的栈,可以解决求 “以某个值为最值的最大区间” 等问题。
-
核心原理:单调性 + 栈
-
相关例题:P2866 Bad Hair Day S | P1950 长方形
单调栈模板
找右边第一个比我大的 维护单调递减栈。
▶
单调栈模版
1 | |
单调队列
-
单调队列:是一种内部元素具有单调性的队列,可以解决求 “区间内最值” 的问题。
-
核心原理:单调性 + 队列
-
相关例题:P1886 滑动窗口 | P2216 理想的正方形
单调队列模板
求区间最大值 维护单调递减队列。
▶
单调队列模版
1 | |
注:单调栈和单调队列一般不会单独作为考察点,往往在复杂问题中作为中间工具出现。
二、整体和部分
前缀和
-
前缀和:可以在常数时间复杂度里 查询区间和。
-
核心公式:
差分
-
差分:可以在常数时间复杂度里 对序列进行区间操作。
-
核心公式:
前缀和与差分
-
一维:差分是前缀和的逆运算。
- 推导:将差分数组求前缀和,如下式:
-
多维:在多维空间中,利用容斥原理进行补偿。
-
查询:。
-
修改:通过四个顶点的修改来覆盖矩形区域。
-
离散化
离散,就是不连续的意思。
-
离散化:在保持原数值之间相对大小关系不变的情况下,将大值域映射到紧凑的连续下标空间,是权值类数据结构(如树状数组、线段树)的预处理工具。
-
核心原理:映射,只要相对顺序不变,对应的关系就不变。
-
相关例题:
- P1908 逆序对 BIT —— 权值数据结构预处理工具。
- [[P3369 模板 普通平衡树 (权值线段树)]] —— 权值数据结构预处理工具。
- [[P1955 程序自动分析]] —— 离散化 + 并查集
离散化模板
▶
离散化模版 - 静态数组版
1 | |
▶
离散化模版 - `vector` 版
1 | |
▶
离散化模版 - `map` 版
1 | |
[L3] 降维技巧
http://miqiu.space/posts/b848cfe3/