单调队列 单调队列(Monotonic Queue)是一种队列内元素单调递增或单调递减的队列结构。主要用于解决滑动窗口最值问题,以及优化某些 DP 转移(如斜率优化中可转化为单调队列的形式)。 核心思想 单调队列的核心是使用 双端队列(deque)维护一个单调的候选值序列。当窗口滑动时: 淘汰过期元
单调栈 单调栈(Monotonic Stack)是一种栈内元素单调递增或单调递减的栈结构。用于解决寻找下一个更大(或更小)元素的一类问题,典型应用包括:柱状图中最大矩形、接雨水、每日温度等。 核心思想 单调栈的核心是维护栈内元素的单调性。当新元素入栈时,不断弹出破坏单调性的栈顶元素,从而在弹出过程中
矩阵 用于快速进行递推,常与快速幂结合使用。 矩阵作为一种存储向量的方式,是一种必须的数据结构。 Code 注意(重载输入输出流时): 要记得返回 istream 或 ostream,并且仔细思考,哪些需要引用传参,哪些不能使用引用传参。 struct
ST 表 ST 表(Sparse Table,稀疏表)是一种用于高效解决可重复贡献问题的数据结构,主要用于静态区间查询(如区间最值、区间 GCD 等)。其核心思想是倍增预处理和动态规划,支持 O(nlogn)
线段树 问题 区间信息的维护与查询 写有哪些运算可以使用线段树来维护? 线段树是一种非常强大的数据结构,它的核心功能是高效地处理区间查询和区间更新操作。线段树能够维护的运算必须满足一个关键性质:结合律。 核心要求:运算满足结合律 对于一个二元运算 ⊕
并查集(DSU) 用于快速判断元素是否属于同一个集合。 支持操作 将两个元素放到同一个集合中。 查询两个元素是否属于同一个集合。 代表元素思想 选择一个元素作该集合的代表元素,其他需要添加的元素作为这个代表元素的儿子,形成一颗树。 把判断集合与元素间的从属转化为集合与集合间的关系,通过递归查找。 实