用户工具

站点工具


2020-2021:teams:wangzai_milk:线段树合并

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
2020-2021:teams:wangzai_milk:线段树合并 [2020/06/02 00:14]
wzx27
2020-2021:teams:wangzai_milk:线段树合并 [2020/07/11 17:48] (当前版本)
zars19
行 12: 行 12:
 ==== 简介 ==== ==== 简介 ====
  
-有些树型的题目会需要在一个结点维护一棵线段树,例如每次把 $u$到$v$ 的路径上的每个点内加一个元素 $k$,然后求每个节点中出现次数最多的数,这时可以在每个点开一棵权值线段树,树上差分之后在 $\text{dfs}$ 中不断合并父子节点代表的两棵线段树。+有些树型的题目会需要在一个结点维护一棵线段树,例如每次把 $u$ 到 $v$ 的路径上的每个点内加一个元素 $k$,然后求每个节点中出现次数最多的数,这时可以在每个点开一棵权值线段树,树上差分之后在 $\text{dfs}$ 中不断合并父子节点代表的两棵线段树。
  
 {{:​2020-2021:​teams:​wangzai_milk:​线段树合并2.png?​600|}} {{:​2020-2021:​teams:​wangzai_milk:​线段树合并2.png?​600|}}
行 57: 行 57:
 </​code>​ </​code>​
 ==== 复杂度 ==== ==== 复杂度 ====
-空间复杂度比较要注意(因为涉及数组开多大QAQ),每次 $\text{update}$ 最多开 $logn$ 个点,所以一般开 $mlogn$ 的数组,$m$ 表示 $\text{update}$ 次数,$n$ 表示权值线段树的值域上限。+空间复杂度比较要注意(因为涉及数组开多大QAQ),每次 $\text{update}$ 最多开 $\log n$ 个点,所以一般开 $m\log n$ 的数组,$m$ 表示 $\text{update}$ 次数,$n$ 表示权值线段树的值域上限。
  
-同空间复杂度,每次 $\text{update}$ 最多开 $logn$ 个点,所以这里的时间复杂度是 $O(mlogn)$。而 $merge$ 的复杂度正比于叶子节点的个数,又因为 $m$ 次操作最多产生 $m$ 个叶子,所以最坏的情况就是合并了 $m$ 个叶子节点及其路径,每次合并都是 $logn$ 级别的,所以这部分的复杂度也是 $O(mlogn)$。+同空间复杂度,每次 $\text{update}$ 最多开 $\log n$ 个点,所以这里的时间复杂度是 $O(m\log n)$。而 $merge$ 的复杂度正比于叶子节点的个数,又因为 $m$ 次操作最多产生 $m$ 个叶子,所以最坏的情况就是合并了 $m$ 个叶子节点及其路径,每次合并都是 $\log n$ 级别的,所以这部分的复杂度也是 $O(m\log n)$ 
  
 ==== 例题 ==== ==== 例题 ====
行 183: 行 183:
 [[https://​www.luogu.com.cn/​problem/​P3224|P3224 HNOI2012]永无乡]] [[https://​www.luogu.com.cn/​problem/​P3224|P3224 HNOI2012]永无乡]]
  
-$n$ 个点,两个操作,一是连接两个点,二是求某个点和所有和他相连的点的第$k$小。+$n$ 个点,两个操作,一是连接两个点,二是求某个点和所有和他相连的点的第 $k$ 小。
  
 第 $k$ 小也是权值线段树干的事儿,连接的操作用并查集维护。 第 $k$ 小也是权值线段树干的事儿,连接的操作用并查集维护。
2020-2021/teams/wangzai_milk/线段树合并.1591028063.txt.gz · 最后更改: 2020/06/02 00:14 由 wzx27