algorithm – 最大数量的段树查询

我已经给出了一个n整数的数组A和每个查询的X D形式的Q查询我必须找到子数组中的最大元素[Ax,A(x-D),A(x-2D)..]

例如:

A = [1,2,3,4,5,6,17,8]
we have query 7 2
Sub Array [17,5,3,1] Ans=17

我们如何以比O(Q * N)更好的时间复杂度解决这个问题,因为没有索引更新,可以通过一些技术离线解决

我不认为Square Decomposition会在这里起作用.

最佳答案 设D大于sqrt(N).然后序列x,x-d,x-2 * d,…包含至多sqrt(N)个元素.因此,在这种情况下,每个查询的天真解决方案在O(sqrt(N))中工作.

设D< = sqrt(N).最多有sqrt(N)这样不同的D’.让我们迭代它们.对于固定值d,我们可以计算线性时间内所有i的f [i] = max(a [i],f [i – d])(边界条件需要正确处理).所有查询(X,D)的答案,其中D = d,只是f [X]. 总时间复杂度为O((N Q)* sqrt(N)).该解决方案使用线性空间量.

点赞