合集-数据结构学习笔记

摘要:线段树优化建图 算法流程 复杂度分析 例题 点击查看代码 #include<bits/stdc++.h> using namespace std; #define int long long const int N = 5e5, M = 5e6 + 9; struct Edge{ int v, w, 阅读全文
posted @ 2024-09-20 16:53 JPGOJCZX 阅读(11) 评论(0) 推荐(0) 编辑
摘要:二叉搜索树 众所周知,一个区间可以有许多信息(最大值、k 大值、区间和、区间平方和、区间立方和、区间异或和、区间 gcd、不同数字个数、颜色段数……),也有许多修改方式(插入、删除、区间加、区间乘、区间改、区间翻转……),我们发现其中一些用线段树不是很好维护,这时我们可能会用到平衡 阅读全文
posted @ 2024-09-20 16:54 JPGOJCZX 阅读(35) 评论(0) 推荐(0) 编辑
摘要:分块 朴素分块 基本概念 分块的基本思想是,通过对原数据的适当划分,并在划分后的每一个块上预处理部分信息,从而较一般的暴力算法取得更优的时间复杂度。 分块的时间复杂度主要取决于分块的块长,一般可以通过均值不等式求出某个问题下的最优块长,以及相应的时间复杂度。 LOJ小分块 #6277. 数列分块入门 阅读全文
posted @ 2024-09-20 17:13 JPGOJCZX 阅读(60) 评论(0) 推荐(1) 编辑
摘要: 阅读全文
posted @ 2024-09-20 17:12 JPGOJCZX 阅读(5) 评论(0) 推荐(0) 编辑
摘要:基本概念 阅读全文
posted @ 2024-09-20 17:11 JPGOJCZX 阅读(8) 评论(0) 推荐(0) 编辑
摘要: 阅读全文
posted @ 2024-12-19 08:01 JPGOJCZX 阅读(10) 评论(0) 推荐(0) 编辑
摘要:动态开点线段树 回忆普通线段树,它的空间一般要开到数组长度的 4 倍 (因此经常MLE),考虑如何优化它。 权值线段树 线段树合并 算法流程 复杂度分析 例题二 #include <bits/stdc++.h> using namespace std; const int N = 1e5 + 阅读全文
posted @ 2024-11-20 08:27 JPGOJCZX 阅读(7) 评论(0) 推荐(0) 编辑
摘要:点分治 边分治 点分树 阅读全文
posted @ 2024-09-20 17:11 JPGOJCZX 阅读(4) 评论(0) 推荐(0) 编辑
摘要:朴素扫描线算法 矩阵面积并 矩阵周长并 二维数点 广义扫描线算法 矩阵信息反演 区间子区间问题 时间-序列问题 参考资料 李xl、付ym 的课件 阅读全文
posted @ 2025-02-13 19:19 JPGOJCZX 阅读(6) 评论(0) 推荐(0) 编辑
摘要:线段树最重要的操作就是 pushup 和 pushdown,对于一类问题,光凭当前节点的信息无法合并,需要用到它的子节点的信息才能合并,这就是线段树单侧递归问题,时间复杂度一般是 O(nlog2n)。 打个比方,比如一条河流被污染了,但是仅在这条河岸找不到污染源,于是只能看这条河是由 阅读全文
posted @ 2025-02-14 21:31 JPGOJCZX 阅读(6) 评论(0) 推荐(0) 编辑
摘要:可持久化数组 例题 可持久化线段树 算法流程 复杂度分析 例题 点击查看代码 #include<bits/stdc++.h> using namespace std; const int N = 2e5 + 9; int a[N], b[N], root[N], cnt, n, m; struct{ 阅读全文
posted @ 2025-02-15 08:37 JPGOJCZX 阅读(4) 评论(0) 推荐(0) 编辑
摘要:# 阅读全文
posted @ 2025-02-19 08:13 JPGOJCZX 阅读(6) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示