从范围操作中查找最大元素

时间:2014-06-03 21:40:10

标签: python arrays algorithm

从大小为A的零数组N开始,我们对每个元素执行一系列K操作,给出add(A[i, j], k)形式的范围查询列表( i <= jk > 0) - 也就是说,对于子数组A[i, j]中的每个元素,添加值k。应用所有这些范围查询后,找到数组中的最大值。

通过构造数组,评估每个查询以及查找最大值,这是微不足道的。例如,

A = [0 for _ in range(N)]

for i, j, k in queries:
    for idx in range(i, j + 1):
        A[idx] += k

max(A) # Solution

但是此解决方案具有复杂度O(NK),对于大型NK而言,这种复杂性相当慢。有更好的解决方案吗?我一直在研究细分树作为一种可能的方法,但看不到明确的方法。

1 个答案:

答案 0 :(得分:1)

A = [0] * (N + 1)

for i, j, k in queries:
    A[i] += k
    A[j + 1] -= k

v, m = 0, 0
for k in A:
    v += k
    m = max(m, v)

return m

这是O(N + K)时间和O(N)内存