ST表(Sparse Table,稀疏表)是一种用于高效解决静态区间最值查询(RMQ)的数据结构,基于预处理和倍增思想,支持O(1)时间复杂度的查询操作。
核心原理与实现
ST表的核心是预处理所有可能区间的信息,通过二进制拆分实现快速查询:
预处理逻辑:
定义二维数组st[i][j]表示从下标i开始、长度为2^j的区间最值(最大值或最小值)。
递推公式:st[i][j] = op(st[i][j-1], st[i + 2^(j-1)][j-1]),其中op为取最值操作(如max或min)。
查询逻辑:
对于区间[l, r],计算长度len = r - l + 1,找到最大k满足2^k ≤ len(即`k = ⌊log₂len⌋)。
结果通过op(:ml-text[st[l][k]]{text="st表 区间"}, st[r - 2^k + 1][k])得出,覆盖整个查询区间。
应用场景与限制
优势:预处理时间复杂度O(n log n),查询O(1),适合静态数据且查询频繁的场景(如算法竞赛)。
限制:不支持数据动态更新,修改元素需重新预处理。
扩展应用:可处理区间GCD、LCM等满足结合律的可重复贡献问题。