道隐于小成,言隐于荣华。.|

⅔钱强

园龄:1年4个月粉丝:5关注:17

合集-数据结构学习

Link-cut Tree
摘要:链剖分 重链剖分 使用静态数据结构维护,按照把子树大小最大的设为重儿子,然后连重边,如此剖分。这样做的好处是,每条路经经过 logn 条重边。 实链剖分(LCT) 逻辑基本相同,选某个点的儿子与这个点之间连一条实边。但是更加灵活,比如access操作之后可能一个点和它儿子只有虚边 使用s
16
0
0
Splay 树
摘要:Splay 树 定义 Splay 是一种高效的 BST,平摊复杂度为 O(logn),可以快速访问热数据 rotate+splay 精华部分 splay双旋 一字旋:先fa再x 之字旋:先x再fa 旋根操作:最麻烦的地方,注意y每次循环要给他赋值 void rotate(int x){
11
0
0
笛卡尔树
摘要:笛卡尔树 定义 以一个数列为基础,存储数列中元素,满足两个限制的树。一是数列中元素的下标满足二叉搜索树的性质,二是元素的大小满足堆的性质。 建树 使用单调栈,在线建树。考虑从左往右在已有的笛卡尔树中添加元素,因为新元素的下标最大,所以只可能取代最右链中的某个元素,并将其收为左儿子。又由于堆的性质,所
17
0
0
小清新线段树
摘要:小清新线段树 定义 结合时间复杂度分析(势能分析)以及懒标记应用的非传统线段树 可以理解为带剪枝的线段树 复杂度证明 以 The Child and Sequence 为例,先看操作 1,2,对于一个数 x 进行取模,要么这个数保持不变。若模数 M>x2,则剩余部分
76
0
0
线段树进阶
摘要:线段树进阶 动态开点 定义 动态存储数据的线段树,可以优化空间复杂度 实现 为了避免 N<<1 ,不再使用完全二叉树存储,而记录左右儿子 ls,rs 此外需要 tot 记录已经开了多少点 在递归时要记录点的左右区间,确保开点时能知道区间大小 void modify(int &
13
0
0
主席树
摘要:主席树 定义 可持久化的线段树 实现 void mkrt(int &p,int q){ int tmp = mknode(); t[tmp] = t[q]; p = tmp; } void pushup(int p){ t[p].dat = t[t[p].ls].dat+t[t[p].rs].dat
11
0
0
树套树
摘要:树套树 树状数组,(动态开点线段树),平衡树 二逼平衡树 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 查询 k 在区间内的排名 查询区间内排名为 k 的值 修改某一位值上的数值 查询 在区间内的前驱(前驱定义为小于 ,且最大的数) 查询 \(k
10
0
0
点击右上角即可分享
微信分享提示
深色
回顶
收起