线段树合并
概念
字面意思。
对于两棵线段树,考虑依下合并:
-
从其中一棵的根结点向下遍历。
-
如果当前结点在两棵线段树中都存在,递归合并其整棵子树。
-
反之,若只在一棵线段树中存在,直接返回这棵线段树中的该结点。
-
若当前结点在两棵线段树中都不存在,则新树中也不存在该结点。
写成代码形式基本如下:
一般认为遍历一次树并进行合并的复杂度大约是 ,但是据说可以被卡。
应用
一般用于处理一部分维护子树的问题,并且通常是值域线段树。
如果对于每一棵子树都维护一棵线段树可以解决问题,不妨考虑线段树合并。
维护子树
维护子树值域
P3605 [USACO17JAN]Promotion Counting P
考虑先对 离散化。用线段树合并维护:对于满足 在 子树内的结点 ,在计算结点 的答案时,对于每一个值 ()维护 的结点 的数量。然后直接查询值在 范围内的结点数量即可。
维护深度
考虑转化为求结点 的 级祖先除 外的 级后代数量,于是可以用线段树合并维护深度。
考虑维护:对于满足 在 子树内的结点 ,在计算结点 的答案时,对于每一个值 ()维护 的结点 的数量,于是只需用线段树查询深度为 的结点数量即可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效