随笔分类 -  数据结构

摘要:简述 我们有这样一个问题:修改点权,询问链上的点权和。这明显是个树链剖分模版。 但如果还有这些操作呢:断开一条边,连上一条边,保证一直是森林。这就是动态树的一种问题。 而 LCT 就是解决这些问题的优秀数据结构。 前言 Splay 要会一些简单的序列操作和打懒标记就好了,知道树剖。 Splay 表示 阅读全文
posted @ 2025-02-16 17:00 fush's_blog 阅读(75) 评论(0) 推荐(0)
摘要:fhq-treap 又名“无旋 treap”,有着码量小,易理解,可持久化等特点。 阅读全文
posted @ 2024-12-29 19:38 fush's_blog 阅读(97) 评论(0) 推荐(0)
摘要:更好的阅读体验? 前言 前置知识: 二叉搜索树 其实 Splay 的实现蛮多的,如果真的要能懂的话建议自己画图理解。 加油。 基础操作 准备操作 我们先把节点要维护的先定义出来。 子树大小 节点的权值 左儿子 右儿子 父亲 size val ch[0] ch[1] fa struct node{in 阅读全文
posted @ 2024-12-29 19:37 fush's_blog 阅读(101) 评论(0) 推荐(0)
摘要:前言 更好的阅读体验。 无旋 treap。 默认读者会 BST 的基本操作、堆和旋转。 本文旋转部分和上面那篇文章的相同。 代码中是小根堆。 思想 treap 既是一棵二叉查找树(tree),也是一个二叉堆(heap)。 但是如果这两个数据结构用同一个权值维护,那么这两种数据结构是矛盾的。 所以 t 阅读全文
posted @ 2024-12-29 19:36 fush's_blog 阅读(65) 评论(0) 推荐(0)
摘要:更好的阅读体验。 定义 BST(二叉搜索树)是一种树形结构,有如下性质。 空树是二叉搜索树。 若左子树非空,那么左子树上所有点的权值均小于其根节点的值。 若左子树非空,那么其右子树上所有点的权值均大于其根节点的值。 二叉搜索树的左右子树均为二叉搜索树。 操作 BST 的单次操作最坏为 \(O(n)\ 阅读全文
posted @ 2024-12-29 19:36 fush's_blog 阅读(205) 评论(0) 推荐(0)
摘要:前言 更好的阅读体验 默认读者会基本的 BST 操作。 节点定义 平衡因子:BF(BalanceFactor),左子树高 \(-\) 右子树高。 平衡树是让树的形态尽可能像完全二叉树,而不是链。 在 AVL 中,我们认为 \(\left|\text{BF}\right|\le 1\),也就是 BF 阅读全文
posted @ 2024-12-29 19:36 fush's_blog 阅读(100) 评论(0) 推荐(0)
摘要:更好的阅读体验? 前言 默认读者会基本的 BST 操作和旋转操作。 本文旋转部分的代码。 rotate(x) 表示将 \(x\) 节点旋转到其父亲节点的位置。 建议阅读:B 树 红黑树 规则 红黑树的平衡不靠平衡因子实时监测,和 treap 的随机值,或像 splay 的均摊。 红黑树的平衡完全靠自 阅读全文
posted @ 2024-12-29 19:30 fush's_blog 阅读(118) 评论(0) 推荐(1)
摘要:线段树你肯定会吧,WBLT 就是把线段树和平衡树结合起来了。 阅读全文
posted @ 2024-12-29 19:05 fush's_blog 阅读(207) 评论(0) 推荐(1)
摘要:前言 默认读者会 BST 的基本操作。 节点定义 替罪羊树采用了懒惰删除的方法,不会立即删除某个点,而是在重构时不放进数组。 struct node{ int ch[2], val; int siz1, siz2, cnt, sum; //扣去懒惰删除的节点数量,没扣去懒惰删除的节点数量,树内相同权 阅读全文
posted @ 2024-12-29 19:04 fush's_blog 阅读(56) 评论(0) 推荐(1)