最大数量的段树查询

时间:2016-11-24 14:49:24

标签: algorithm segment-tree

我给了一个n整数的数组A,并且Q形式为X D查询每个查询我必须找到子数组{{1}中的最大元素}}

例如:

[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)不会在这里发挥作用。

1 个答案:

答案 0 :(得分:1)

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

D <= sqrt(N)。最多只有sqrt(N)Dd个。让我们迭代它们。对于固定值f[i] = max(a[i], f[i - d]),我们可以在线性时间内为所有i计算(X, D)(边界条件需要正确处理)。所有查询的答案D = d,其中f[X]只是O((N + Q) * sqrt(N))

总时间复杂度为ionViewCanLeave(): Promise<void> { return new Promise((resolve, reject) => { let confirm = this.alertCtrl.create({ title: 'Are you sure?', message: 'Bunnies will die :(', buttons: [{ text: 'OK', handler: () => { resolve(); }, }, { text: 'Cancel', handler: () => { reject(); } }], }); confirm.present(); }) } 。此解决方案使用线性空间量。