上一页 1 ··· 3 4 5 6 7
摘要: 启发式合并 定义 在并查集和树上处理离线问题的算法,主要思想是把小集合并到大集合上 做法 树上颜色:一棵树,每个节点都有一个颜色,给定 m 次询问,问以 x 为根的子树有多少种不同的颜色。 轻重剖分,只需要记录重儿子即可。先遍历轻儿子,不计修改。再遍历重儿子,计入修改。最后再遍历轻儿子(dfs序列简 阅读全文
posted @ 2024-02-04 12:39 妖灵梦 阅读(23) 评论(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 阅读全文
posted @ 2024-02-04 12:39 妖灵梦 阅读(17) 评论(0) 推荐(0)
摘要: 线性基 定义 一个正整数序列,让线性基可以用异或和表示其中任意一个数,并且线性基的个数最少 性质 序列中的任何一个数都可以由线性基中的数异或得到 任何数的异或和不为零 保持性质一的前提下,线性基的数量唯一且最少 线性基的构造 不能插入线性基,即x经过若干次异或变成0,根据性质三不需加入 可以被插入, 阅读全文
posted @ 2024-02-02 17:12 妖灵梦 阅读(33) 评论(0) 推荐(0)
摘要: Splay 树 定义 Splay 是一种高效的 BST,平摊复杂度为 \(O(\log n)\),可以快速访问热数据 rotate+splay 精华部分 splay双旋 一字旋:先fa再x 之字旋:先x再fa 旋根操作:最麻烦的地方,注意y每次循环要给他赋值 void rotate(int x){ 阅读全文
posted @ 2024-01-30 21:24 妖灵梦 阅读(20) 评论(0) 推荐(0)
摘要: 后缀数组 定义 suf[i] i到最后的子串 rank[i] suf[i]在所有后缀中的排名 sa[i] 排名为 i 的后缀的开始位置 sa[i] 与 rank[i] 为互逆操作,相反的排列 height[i] suf[sa[i]] 与 suf[sa[i-1]] 的最长公共前缀 H[i] 即 Hei 阅读全文
posted @ 2024-01-28 20:43 妖灵梦 阅读(23) 评论(0) 推荐(0)
摘要: 链剖分 重链剖分 使用静态数据结构维护,按照把子树大小最大的设为重儿子,然后连重边,如此剖分。这样做的好处是,每条路经经过 \(\log n\) 条重边。 实链剖分(LCT) 逻辑基本相同,选某个点的儿子与这个点之间连一条实边。但是更加灵活,比如access操作之后可能一个点和它儿子只有虚边 使用s 阅读全文
posted @ 2024-01-25 22:13 妖灵梦 阅读(36) 评论(0) 推荐(0)
上一页 1 ··· 3 4 5 6 7