先写一道水题的博客,为后面要写的博客做一个铺垫。 ヾ(◍°∇°◍)ノ゙ RMQ(Range Minimum/Maximum Query),即区间最值查询,对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j之间的最小/大值。 时间复杂度: 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])。 传送门: 一篇写的容易理解的博客 2/21/2018 5:12:00 PM -------------------------------------------------------分割线-------------------------------------------------------