RMQ(区间最值查询)入门知识

1.RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j里的最小(大)值,也就是,RMQ问题是指求区间最值的问题。

2.

主要方法及复杂度如下:
1、朴素(即搜索),O(n)-O(qn) online。
2、 线段树,O(n)-O(qlogn) online。
3、ST(实质是 动态规划),O(nlogn)-O(q) online。
ST算法(Sparse Table),以求最大值为例,设d[i,j]表示[i,i+2^j-1]这个区间内的最大值,那么在询问到[a,b]区间的最大值时答案就是max(d[a,k], d[b-2^k+1,k]),其中k是满足2^k<=b-a+1(即长度)的最大的k,即k=[ln(b-a+1)/ln(2)]。
d的求法可以用 动态规划,d[i, j]=max(d[i, j-1],d[i+2^(j-1), j-1])。
4、RMQ标准算法:先规约成 LCA(Lowest Common Ancestor),再规约成约束RMQ,O(n)-O(q) online。
首先根据原 数列,建立 笛卡尔树,从而将问题在 线性时间内规约为LCA问题。LCA问题可以在线性时间内规约为约束RMQ,也就是数列中任意两个相邻的数的差都是+1或-1的RMQ问题。约束RMQ有O(n)-O(1)的在线解法,故整个算法的 时间复杂度为O(n)-O(1)。

你可能感兴趣的:(ACM)