随笔分类 - 数据结构
摘要:主要是讲两个东西: CDQ分治&整体二分 CDQ分治 [模板] 三维偏序 离线——CDQ分治 一维偏序就是归并排序求逆序对?Yes 好,再加一维: 处理这一维我们考虑std::sort水掉这一维, 剩下的一维就直接维护一个树状数组查询即可 好,再加一维: 既然主题是分治的话,就直接用吧 分治流程:
阅读全文
摘要:可持久化线段树&主席树 似乎学到了一点点 主席树——可持久化权值线段树 于是就正式开坑了 权值线段树 权值线段树是维护值域信息的线段树 在一个数组 上建权值线段树, 每个节点维护的是区间 中,每个数据出现的次数 可持久化 可持久化基于的是一个原理: 继承前后修改中不变的数据 于是我们
阅读全文
摘要:动态开点 动态开点是对一个不完整区间开线段树 对于这个区间开一颗正常线段树即可 但是一个问题就是不一定是直接完全二叉树规则 所以要记录左右节点儿子编号 区间由函数传参传入 一般是用于值域太大而查询范围比较小的情况 线段树合并 重新开一颗线段树,保存两棵线段树的信息 递归左右子节点即可 如果线段树A有
阅读全文
摘要:动态区间问题 一般见到这些个,传统做法就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[
阅读全文
摘要:分块 分块的基本思想: 以空间换时间和平衡时空复杂度 用处:维护区间信息 同线段树相比,分块的时间复杂度要高一些,换来的是灵活性和通用性 ~~(当然更难调......)~~ 根号分块 这里是已知用分块的时空复杂度去算块长,假定块长为 这里的原理就是上边说的平衡时空复杂度 其实最主要的应用位置
阅读全文
摘要:莫队(~~莫比乌斯队列~~),离线算法 首先我们需要知道一个询问的回答 然后我们需要知道询问区间的变化对于询问答案的影响 知道这两点以后就可以利用区间端点l和r来回移动修改答案了 不过如果l和r的跨度很大,甚至大于重新算答案,显然这个算法还不如暴力 这时候我们就可以优化一下下 1.分块 主要作用是限
阅读全文
摘要:1.Promotion Counting 查询以x为根的子树上有多少节点权值大于x 类似于查询排名?权值线段树/平衡树 线段树维护区间,使用DFS序把树上操作转化为区间操作 在每一棵子树访问完毕后将这棵子树向上合并到父节点对应线段树即可 2.魔法少女LJJ ~~线段树合并裸题吧...~~ 码力题,思
阅读全文
摘要:线段树是一种维护区间的数据结构,与树状数组类似,其支持区间的修改与查询 树状数组优缺点: 优:时空复杂度好,码量小 缺:对于解决区间问题有局限性 线段树优缺点: 优:更加通用,可轻松解决用树状数组难以解决的问题 缺:时空复杂度较高,码量较大 线段树三大操作: 1.建树 我们的建树方式是:若p为父节点
阅读全文
摘要:树状数组与并查集类似,是一种数据结构,它可以用来维护前缀和问题 不过,利用前缀和和查分的思想,我们也可以用树状数组解决区间问题 与线段树不同,目前我暂且认为线段树解决最值问题,而树状数组解决求和问题 树状数组原理建立在二叉树上:利用lowbit运算实现向根节点保存的原理 介绍lowbit的程序实现~
阅读全文
摘要:其实我栈和队列学的不太好 这有点伤...... 单调栈及单调队列是维护顺序排列(升序或降序)的一种数据结构 非常类似于DP中的最优状态保存和查询 因此可用单调队列维护DP 维护的手段就是如果满足单调性加入,不满足单调性退出 遍历时间O(n),但是查最值的开销就是O(1) 保证及时更新单调栈或单调队列
阅读全文
摘要:并查集——树型数据结构,应用就是合并与查询 基本应用:初始化,查找祖先,合并以及判等 基础的并查集主要是板子, 初始化 点击查看代码 ``` void renew(int n){ for(int i=1;i 查询依靠递归实现: 点击查看代码 ``` int find(int x){ if(f[x]!
阅读全文