合集-数据结构学习笔记

摘要:李超线段树 算法流程 洛谷 P4097 【模板】李超线段树 / [HEOI2013] Segment 建议先去了解一下线段树进阶应用学习笔记(四):单侧递归问题。 有一类问题,特别是斜率优化 DP 时,平面上有若干线段,我们需要处理与直线 \(x = x_0\) 相交的线段中,交点纵坐标的最大值,或 阅读全文
posted @ 2024-09-20 16:53 Orange_new 阅读(44) 评论(0) 推荐(0)
摘要:二叉搜索树 众所周知,一个区间可以有许多信息(最大值、\(k\) 大值、区间和、区间平方和、区间立方和、区间异或和、区间 \(\gcd\)、不同数字个数、颜色段数……),也有许多修改方式(插入、删除、区间加、区间乘、区间改、区间翻转……),我们发现其中一些用线段树不是很好维护,这时我们可能会用到平衡 阅读全文
posted @ 2024-09-20 16:54 Orange_new 阅读(81) 评论(0) 推荐(0)
摘要:分块 朴素分块 基本概念 分块的基本思想是,通过对原数据的适当划分,并在划分后的每一个块上预处理部分信息,从而较一般的暴力算法取得更优的时间复杂度。 分块的时间复杂度主要取决于分块的块长,一般可以通过均值不等式求出某个问题下的最优块长,以及相应的时间复杂度。 LOJ小分块 #6277. 数列分块入门 阅读全文
posted @ 2024-09-20 17:13 Orange_new 阅读(129) 评论(0) 推荐(1)
摘要: 阅读全文
posted @ 2024-09-20 17:12 Orange_new 阅读(24) 评论(0) 推荐(0)
摘要:动态开点线段树 回忆普通线段树,它的空间一般要开到数组长度的 \(4\) 倍 (因此经常MLE),考虑如何优化它。 权值线段树 线段树合并 算法流程 复杂度分析 例题二 #include <bits/stdc++.h> using namespace std; const int N = 1e5 + 阅读全文
posted @ 2024-11-20 08:27 Orange_new 阅读(30) 评论(0) 推荐(0)
摘要:空间基本概念 \(B\) 维正交范围:在一个 \(B\) 维直角坐标系下,第 \(i\) 维坐标在一个整数范围 \([li,ri]\) 间,内部的点集。 一般 \(1\) 维正交范围简称区间,\(2\) 维正交范围简称矩形,\(3\) 维正交范围简称长方体。 \(\text{2B - Side}\) 阅读全文
posted @ 2025-02-13 19:20 Orange_new 阅读(38) 评论(0) 推荐(0)
摘要:线段树最重要的操作就是 pushup 和 pushdown,对于一类问题,光凭当前节点的信息无法合并,需要用到它的子节点的信息才能合并,这就是线段树单侧递归问题,时间复杂度一般是 \(O(n \log^2 n)\)。 打个比方,比如一条河流被污染了,但是仅在这条河岸找不到污染源,于是只能看这条河是由 阅读全文
posted @ 2025-02-14 21:31 Orange_new 阅读(502) 评论(0) 推荐(5)
摘要:可持久化数据结构学习笔记可持久化基本概念 我们生活中经常会遇到这样的场景(也可能是出题人故意刁钻你),那就是我么需要访问一个历史版本的数据状态(比如 Ctrl z、开机还原、自动保存等),此时如果两个连续的历史版本之间差距比较小,且历史版本之间的差距比较好存储,那么我们可以考虑可持久化。 我们现在来打个比方,以此来解释可持 阅读全文
posted @ 2025-02-15 08:37 Orange_new 阅读(21) 评论(0) 推荐(0)