这是本人的第2篇博客,那神马是RMO呢,今天我就带你去了解一下。
RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j),返回数列A中下标在i,j之间的最小或大值。
这是其他算法解释RMQ的复杂度
显然以上算法的复杂度都不尽如人意,如何能用较短的时间预处理,又能用较快的时间查询呢? 是时候利用倍增思想了!
那神马是倍增呢
所谓倍增,就是把一个数据规模为n的问题分解成若干个2^ai的和,预处理数据范围内所有2^ai 的情况,再将这些规模为2^ai 的问题通过一定的方法合并,得出原问题的解。 分治是把整个问题分成几个互不重复的子问题,合并求解;倍增是找互为倍数关系的子问题之间的联系,再合并求解。 可以认为,倍增也体现了分治思想。 适用题型:问题规模大,且成倍数据规模的问题之间存在简单的递推关系,可以轻易地由小范围求出大范围
比如数列:3,5,2,4,7,6 见下图