一.RMQ问题的概念
RMQ(Range Minimum/Maximum Query)问题,简单说就是求区间最值问题,是求区间最大值或最小值,即范围最值问题,若是简单的单次询问或者是区间长度很短的询问,可以用暴力的方法来实现,但面对大数据的时候此方法必然超时,这里介绍O(nlogn)预处理,O(1)查询的ST算法。
二,st算法
ST算法(Sparse Table)是用于解决RMQ问题(区间最值问题)的一种强有力的工具。
它可以O(nlogn)预处理,O(1)查询最值,利用的是倍增的思想。
但是使用ST算法后就不能进行修改操作了。
st算法的主要思想就是将所求的区间化为两个小区间,这两个区间的长度正好是2的k次幂,总长度正好覆盖[l,r],得到的结果就是所求答案。
首先要清楚为什么是分成两段,而不是3段,4段,首先分成两段的话更好写的,比那些处理3段以及n段更简单。在logn的时间复杂度下,以2为底或者以其他数为底的话,时间复杂度差距也不是那么明显,所以选择了分成两段,便于位运算以及其他方面的简便操作。
三,例题
-
#A. Balanced Lineup排队
Description
每天,农夫 John 的N(1 <= N <= 50,000)头牛总是按同一序列排队.

本文介绍RMQ(范围最值问题),简单询问可用暴力法,但大数据时会超时。重点介绍了用于解决RMQ问题的ST算法,它能O(nlogn)预处理、O(1)查询,利用倍增思想,不过不能修改。还通过两道例题展示了ST算法的应用,包括思路和代码。
最低0.47元/天 解锁文章
4085





