最近公告祖先 (LCA)
摘要:最近公共祖先LCA int LCA(int x,int y) { if(dep[x]<dep[y]) swap(x,y); int d=dep[x]-dep[y]; for(int p=0,k=1;p<k;p++,k<<=1) if(d&k) x=f[p][x]; if(x==y) return x
阅读全文
posted @
2020-07-23 20:13
Allen_lml
阅读(115)
推荐(0) 编辑
树链剖分【板子】
摘要:树链剖分 void dfs1(int x) { sz[x]=1; for(int i=b[x];i;i=nxt[i]) { if(to[i]==f[x]) continue; f[to[i]]=x; dep[to[i]]=x; dep[to[i]]=dep[x]+1; dfs1(to[i]); sz
阅读全文
posted @
2020-07-23 20:09
Allen_lml
阅读(114)
推荐(0) 编辑
平衡树之Treap
摘要:二叉搜索树 性质:一个节点x左子树所有点的关键字都比x的关键字小,右子树所有点的关键字都比x的关键字大 treap “树堆” “Tree+Heap” 性质:每个点随机分配一个权值,使treap同时满足堆性质和二叉搜索树性质 复杂度:期望O(logn) 设每个节点的关键字是key,随机权值是rand
阅读全文
posted @
2020-07-21 20:02
Allen_lml
阅读(146)
推荐(0) 编辑
ST表
摘要:ST表 *ST表用来实现O(logn)*预处理,O(1)查询区间最值。 不支持修改 适用于O(logn)查询区间最值会被卡的情况。 以查询最大值为例。 预处理:记
f_{i,k}表示从i开始
2^k个数的最大值,则
f_{i,k}=max(
f_{i,k},\(f_{i+2^{k-
阅读全文
posted @
2020-07-18 21:22
Allen_lml
阅读(58)
推荐(0) 编辑
配对堆
摘要:配对堆 一种可并堆。 插入、合并复杂度为O(1),删除等操作的复杂度为均摊O(logn)。 优点:代码短,常数小。 配对堆的结构 用左儿子右兄弟的方式存树。 对每个结点,储存其右兄弟和最左端的儿子。 操作 merge(x,y):合并以x,y为根的两个配对堆。若x,y中有空树则返回非空树,否则将节点大
阅读全文
posted @
2020-07-18 21:04
Allen_lml
阅读(443)
推荐(0) 编辑