线段树合并 & 分裂
线段树的合并与分裂是线段树的常用技巧,常见于权值线段树维护可重集的场景。
例如,树上某些结点处有若干操作,如果需要自下而上地将子节点信息传递给亲节点,而单个结点处的信息又方便用线段树维护时,就可以应用线段树合并的技巧控制整体的复杂度。
线段树合并
过程
顾名思义,线段树合并是指建立一棵新的线段树,这棵线段树的每个节点都是两棵原线段树对应节点合并后的结果。它常常被用于维护树上或是图上的信息。
显然,我们不可能真的每次建满一颗新的线段树,因此我们需要使用上文的动态开点线段树。
线段树合并的过程本质上相当暴力:
假设两颗线段树为 A 和 B,我们从 1 号节点开始递归合并。
递归到某个节点时,如果 A 树或者 B 树上的对应节点为空,直接返回另一个树上对应节点,这里运用了动态开点线段树的特性。
如果递归到叶子节点,我们合并两棵树上的对应节点。
最后,根据子节点更新当前节点并且返回。
线段树合并的复杂度
显然,对于两颗满的线段树,合并操作的复杂度是
实现
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
例题
luogu P4556 [Vani 有约会] 雨天的尾巴/【模板】线段树合并
解题思路
线段树合并模板题,用差分把树上修改转化为单点修改,然后向上 dfs 线段树合并统计答案即可。
参考代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
|
线段树分裂
过程
线段树分裂实质上是线段树合并的逆过程。线段树分裂只适用于有序的序列,无序的序列是没有意义的,常用在动态开点的权值线段树。
注意当分裂和合并都存在时,我们在合并的时候必须回收节点,以避免分裂时会可能出现节点重复占用的问题。
从一颗区间为
从 1 号结点开始递归分裂,当节点不存在或者代表的区间
当
当
线段树分裂的复杂度
可以发现被断开的边最多只会有
实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
例题
P5494【模板】线段树分裂
解题思路
线段树分裂模板题,将
- 将
树合并入 树:单次合并即可。 树中插入 个 :单点修改。- 查询
中数的个数:区间求和。 - 查询第
小。
参考代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
|
习题
- Luogu P4556 [Vani 有约会] 雨天的尾巴/【模板】线段树合并
- Luogu P5494【模板】线段树分裂
- Luogu P1600 天天爱跑步
- Luogu P4577 [FJOI2018] 领导集团问题
- Luogu P2824 [HEOI2016/TJOI2016] 排序
本页面最近更新:2025/4/7 00:24:17,更新历史
发现错误?想一起完善? 在 GitHub 上编辑此页!
本页面贡献者:billchenchina, c-forrest, CCXXXI, chenryang, chenzheAya, Chrogeek, ChungZH, CJSoft, cjsoft, countercurrent-time, DawnMagnet, Early0v0, Enter-tainer, ethan-enhe, GavinZhengOI, Haohu Shen, Henry-ZHR, HeRaNO, hjsjhn, hly1204, hsfzLZH1, iamtwz, Ir1d, jaxvanyang, Jebearssica, kenlig, konnyakuxzy, ksyx, luoguojie, Marcythm, megakite, Menci, moon-dim, NachtgeistW, onelittlechildawa, orzAtalod, ouuan, shadowice1984, shawlleyw, shuzhouliu, StudyingFather, SukkaW, Tiphereth-A, wy-luke, x2e6, Xeonacid, Ycrpro, yifan0305, zeningc
本页面的全部内容在 CC BY-SA 4.0 和 SATA 协议之条款下提供,附加条款亦可能应用