李超线段树
概述
-
李超线段树是真正用于维护“线段”的线段树。
-
具体来说,李超线段树主要用于维护平面上线段(表现为给出定义域的一次函数)信息,通常为某处的最大/小值等。
实现原理
-
不妨以加线段,查询
与所有线段的交点的最大纵坐标为例。 -
众所周知,区间加等差数列,区间求和是容易的。然而区间取
却难以平凡维护。 -
注意到一次函数有一个非常美妙的性质:(非严格)单调。不妨先将修改区间下放到到达点上,若对应区间仅由一条线段支配,则两者的交点能给我们提供很多有意义的信息。
-
交点在区间外:说明有一者严格优。删去另一者。
-
交点在区间内:此时区间内的答案是一个分段函数。显然线段树并不能很好地处理分段函数——引入标记永久化。
-
-
显然,交点在哪一侧,另一侧就被一个线段完全支配。从而我们可以单侧递归!线段的函数成了永久化的标记,放在任意的节点上,结合标记永久化的查询方式即可。
复杂度分析
- 显然为插入
,询问 。
例题
P4097 [HEOI2013] Segment
-
题意:插入线段,求与
交点最大的线段编号。 -
卡精度毒瘤题!虽然没卡到我,但逻辑上讲宽广的斜率范围
应该是随便卡精度。 -
毕竟是板子,不多说了。
。
P4254 [JSOI2008] Blue Mary 开公司
-
题意:插入线段,求与
的最大交点,保留到百位(百位以下舍去)。 -
这就是不卡精度的鉴题目!也是板子,不说了,
。
23.2.14 T4 鲍勃打比赛
-
题意:给出序列
,记 为其所有不降子序列的集合,求 , 不太好数学语言化,用自然语言来说是各项权值和+每个未选段的价值,一个长为 的未选段的第 项的价值为 。 -
数据范围:
。 -
本题也见 CDQ 分治。
-
有什么好说的?设计 dp 如下:
-
状态设计:
表示以 结尾的 LIS 的最大权。 -
初始化:
。 -
状态转移:
-
-
这一状态转移是非常明显的斜率式。按
升序为第一关键字, 升序为第二关键字排序,按这个序转移,将对应的直线插到 上,查询的时候单点查最值即可。记得每个 (包括 )都应向终点转移。复杂度就是李超树的 ,当然每种后缀加各一种我猜有可能可以分析。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App