一.概述
RMQ问题,是求区间最大值或最小值,即范围最值问题。
暴力解法是对每个询问区间循环求解,设区间长度n,询问次数m,则复杂度是O ( nm )。
一般还可以使用线段树求解,复杂度是O(mlogn)。
但还有一种更简便的ST算法,预处理复杂度是O(nlogn),查询O(1)。
二.ST(Sparse Table)算法
它适用于静态空间的RMQ查询。
给定长度为n的静态数列,做m次询问,每次给定,查询区间[L,R]内的最值。
原理:一个大区间若能被两个小区间覆盖,那么大区间的最值等于两个小区间的最值。(小区间有重合不影响结果)
基本思路:
1)把整个数列划分为很多小区间,并提前计算出每个小区间的最值。
按照倍增分成小区间。
每组小区间的最值,都可以从前一组递推得来。