线段树合并 学习笔记
过程
合并并不困难,对于两棵线段树,合并无疑就是就两棵线段树维护的区间信息进行合并。
就比如,有两棵线段树如下图:
将第二棵树合并到第一棵树,就是把除了维护 \([2, 2]\) 的全部对应加,而 \([2, 2]\) 则新开节点维护。
时间复杂度显然 \(\mathcal{O}(n \log n)\)。
实现
int Merge(int x, int y, int l, int r){
if (!x || !y) {
return x + y;
}
if (l == r) {
//merge segment
return x;
}
int mid = l + r >> 1;
s[x].l = Merge(s[x].l, s[y].l, l, mid);
s[x].r = Merge(s[x].r, s[y].r, mid + 1, r);
pushup(x);
return x;
}
当然,也可以开新树维护合并结果。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!