“把LCA 归约到RMQ时,对根树做完整树上 Euler 序:进入或返回一个顶点都记录该顶点与深度,得到顶点序列 $E$ 和深度数组 $D$,相邻深度恰差 $\pm1$。令 first$(v)…”
形式陈述 ​
静态查询接口 ​
给定全序集合上的静态数组
外层的最小值固定“并列时返回最左索引”。若应用只需要最小值,可以再读取
“静态”表示预处理完成后数组不再修改。输入若允许点更新、区间更新或版本切换,就已经成为不同问题,不能直接继承静态 RMQ 的复杂度。
直觉
RMQ 预处理的是区间之间大量重叠的比较信息,而不是每次重新求最小值。不同结构在预处理时间、额外空间与查询时间之间分配这份信息;稳定的端点与并列规则让所有表项、笛卡尔树归约和返回位置具有同一语义。
例子与边界
一个带并列值的查询 ​
取
因为位置 RMQ(1,4) 会包含不同元素;比较算法或测试数据前必须先统一端点约定。
朴素基线逐项扫描查询区间,预处理为
三维成本 ​
静态 RMQ 解法至少要同时报告:预处理时间、额外空间和最坏查询时间。只写“
Sparse Table利用最小运算的幂等性,让两个可能重叠的二次幂区间覆盖查询;它以
问题边界 ​
RMQ 的最小运算具有幂等性,重叠覆盖不会改变答案。区间和却会把重叠部分重复计数,所以 Sparse Table 的同一查询公式不能原样迁移到任意区间聚合问题。
点更新也会使覆盖该位置的许多预计算区间同时过期。若题目要求更新后的查询,应在问题定义中写出操作序列和两类操作的成本,而不是把动态能力当成某个静态实现的附加优化。
RMQ 与最近公共祖先之间存在经典归约,但归约依赖 Euler tour、深度数组和稳定的并列规则。本页只固定被求解的问题;归约构造和常数查询实现由各自页面承担。
推论与应用
在数组完全静态、预处理空间允许线性且查询只需返回最小值或其位置时,线性预处理常数时间 RMQ通过笛卡尔树、Euler tour 与微块表等结构实现
静态 RMQ 可用稀疏表、线性空间结构或 RMQ–LCA 归约实现,并服务于 LCA、后缀数组 LCP 与简洁树导航。需要更新、求和或其他非幂等聚合时,应重新选择接口与结构,而不能只替换“min”运算符。
参考资料
- Bender, Farach-Colton, “The LCA Problem Revisited,” 2000.
- Fischer, Heun, “Space-Efficient Preprocessing Schemes for RMQ,” 2011.