随笔分类 - 数据结构
摘要:CDQ分治&整体二分 CDQ 分治 CDQ 分治可以解决的问题有三维偏序和离线带修询问 三维偏序 首先看一下二维偏序怎么做, 通常是离线扫描一维,数据结构统计另一维 在此基础上,我们处理第三个维度。 首先对于离线扫描这一维,lin4xu 学长教过所谓 “离线分治和扫描线” 就是离线之后要么分治,要么
阅读全文
摘要:可持久化线段树&主席树 似乎学到了一点点 主席树——可持久化权值线段树 于是就正式开坑了 权值线段树 权值线段树是维护值域信息的线段树 在一个数组$a$上建权值线段树, 每个节点维护的是区间$[l,r]$中,每个数据出现的次数 可持久化 可持久化基于的是一个原理: 继承前后修改中不变的数据 于是我们
阅读全文
摘要:动态开点 一般是解决值域很大但是点数比较稀疏的情况 针对值域很大的情况来说开满整个值域显然会让空间爆掉 但是因为点数很稀疏,所以大部分点开出来都是空点 那么既然开出来没有信息可以维护, 为什么不砍掉这些点,考虑在合并的时候特殊处理呢? 所以就有了动态开点,即在值域上某个点/区间从空被第一次更新的时候
阅读全文
摘要:动态区间问题 一般见到这些个,传统做法就Splay和无旋Treap 然后一个基本的原理就是: 平衡树的中序遍历必须和原序列一致 然后其实这个也挺简单 区间插入 这个Splay可以干: 区间左端点Splay到根 右端点Splay到右儿子 然后插到端点左儿子即可 区间翻转 首先找到对应区间 还是这个操作
阅读全文
摘要:BST 二叉查找树的定义: 一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值; (3)左、右子树也分别为二叉排序树; 从上述定义可以看出BST的性质: BST中序遍历的序列权值递增
阅读全文
摘要:板子 无旋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[
阅读全文
摘要:分块 分块的基本思想: 以空间换时间和平衡时空复杂度 用处:维护区间信息 同线段树相比,分块的时间复杂度要高一些,换来的是灵活性和通用性 ~~(当然更难调......)~~ 根号分块 这里是已知用分块的时空复杂度去算块长,假定块长为 $K$ 这里的原理就是上边说的平衡时空复杂度 其实最主要的应用位置
阅读全文
摘要:权值线段树维护值域上每个数字出现的次数,与线段树合并,当规模过大的时候只需要开一部分节点,即为动态开点
阅读全文

浙公网安备 33010602011771号