短竖线超李,超完就超线段树
李超线段树
作用:
加入一个一次函数,定义域为 [l,r];
给定 k,求定义域包含 k 的所有一次函数中,在 x=k 处取值最大的那个,如果有多个函数取值相同,选编号最小的。
李超线段树使用条件:任意两函数之间最多只能有一个交点。大部分情况下李超线段树维护的是直线。
李超线段树的每一个节点维护所有经过该区间中点的线段中,函数值在区间中点取值最大的函数的解析式。
加入函数部分分成两步
- 把函数定义域分解成线段树的区间。
- 对于每个部分去更新维护的线段。
具体来说,设当前区间的中点为 m,我们拿新线段 f 在中点处的值与原最优线段 g 在中点处的值作比较。
如果新线段 f 更优,则将 f 和 g 交换。那么现在考虑在中点处 f 不如 g 优的情况:
- 若在左端点处 f 更优,那么 f 和 g 必然在左半区间中产生了交点,f 只有在左区间才可能优于 g,递归到左儿子中进行下传;
- 若在右端点处 f 更优,那么 f 和 g 必然在右半区间中产生了交点,f 只有在右区间才可能优于 g,递归到右儿子中进行下传;
- 若在左右端点处 g 都更优,那么 f 不可能成为答案,不需要继续下传。
除了这两种情况之外,还有一种情况是 f 和 g 刚好交于中点,在程序实现时可以归入中点处 f 不如 g 优的情况,结果会往 f 更优的一个端点进行递归下传。
合并(还没写过)
类似于普通线段树的合并,我们定义以下过程来将两个李超线段树节点 u,v 合并,并以 u 作为新的根。
- 如果 v 为空,结束过程。
- 如果 u 为空,将 v 复制给 u。
- 将 v 对应线段插入到 u 为根的子树。
- 递归将 u,v 的左右子树对应合并。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具