随笔分类 -  数据结构

摘要:CDQ分治&整体二分 CDQ 分治 CDQ 分治可以解决的问题有三维偏序和离线带修询问 三维偏序 首先看一下二维偏序怎么做, 通常是离线扫描一维,数据结构统计另一维 在此基础上,我们处理第三个维度。 首先对于离线扫描这一维,lin4xu 学长教过所谓 “离线分治和扫描线” 就是离线之后要么分治,要么 阅读全文
posted @ 2022-10-11 21:29 2K22 阅读(42) 评论(0) 推荐(0)
摘要:可持久化线段树&主席树 似乎学到了一点点 主席树——可持久化权值线段树 于是就正式开坑了 权值线段树 权值线段树是维护值域信息的线段树 在一个数组$a$上建权值线段树, 每个节点维护的是区间$[l,r]$中,每个数据出现的次数 可持久化 可持久化基于的是一个原理: 继承前后修改中不变的数据 于是我们 阅读全文
posted @ 2022-08-03 20:14 2K22 阅读(50) 评论(0) 推荐(0)
摘要:动态开点 一般是解决值域很大但是点数比较稀疏的情况 针对值域很大的情况来说开满整个值域显然会让空间爆掉 但是因为点数很稀疏,所以大部分点开出来都是空点 那么既然开出来没有信息可以维护, 为什么不砍掉这些点,考虑在合并的时候特殊处理呢? 所以就有了动态开点,即在值域上某个点/区间从空被第一次更新的时候 阅读全文
posted @ 2022-07-29 11:42 2K22 阅读(28) 评论(0) 推荐(0)
摘要:动态区间问题 一般见到这些个,传统做法就Splay和无旋Treap 然后一个基本的原理就是: 平衡树的中序遍历必须和原序列一致 然后其实这个也挺简单 区间插入 这个Splay可以干: 区间左端点Splay到根 右端点Splay到右儿子 然后插到端点左儿子即可 区间翻转 首先找到对应区间 还是这个操作 阅读全文
posted @ 2022-06-17 11:11 2K22 阅读(71) 评论(0) 推荐(1)
摘要:BST 二叉查找树的定义: 一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树; 从上述定义可以看出BST的性质: BST中序遍历的序列权值递增 阅读全文
posted @ 2022-05-26 12:23 2K22 阅读(52) 评论(0) 推荐(0)
摘要:板子 无旋Treap 点击查看代码 #include <bits/stdc++.h> using namespace std; const int o=2222222; struct Treap{ struct node{ int l,r; int size; int val; int k; }t[ 阅读全文
posted @ 2022-05-26 12:22 2K22 阅读(35) 评论(0) 推荐(0)
摘要:分块 分块的基本思想: 以空间换时间和平衡时空复杂度 用处:维护区间信息 同线段树相比,分块的时间复杂度要高一些,换来的是灵活性和通用性 ~~(当然更难调......)~~ 根号分块 这里是已知用分块的时空复杂度去算块长,假定块长为 $K$ 这里的原理就是上边说的平衡时空复杂度 其实最主要的应用位置 阅读全文
posted @ 2022-05-15 20:31 2K22 阅读(50) 评论(0) 推荐(0)
摘要:字典树 阅读全文
posted @ 2022-05-15 20:25 2K22 阅读(69) 评论(0) 推荐(0)
摘要:离线莫队与神奇的推广 阅读全文
posted @ 2022-04-24 16:31 2K22 阅读(125) 评论(0) 推荐(0)
摘要:权值线段树维护值域上每个数字出现的次数,与线段树合并,当规模过大的时候只需要开一部分节点,即为动态开点 阅读全文
posted @ 2022-04-17 17:30 2K22 阅读(122) 评论(0) 推荐(0)
摘要:对于区间问题通用的数据结构,考虑其如何划分区间与维护信息的过程 阅读全文
posted @ 2022-02-07 20:12 2K22 阅读(144) 评论(0) 推荐(0)
摘要:树状数组快速维护单点-区间操作 阅读全文
posted @ 2022-01-22 21:07 2K22 阅读(95) 评论(0) 推荐(0)
摘要:如题 阅读全文
posted @ 2022-01-21 17:52 2K22 阅读(82) 评论(0) 推荐(0)
摘要:普通并查集与并查集拓展 阅读全文
posted @ 2022-01-16 10:58 2K22 阅读(165) 评论(1) 推荐(0)