使用特定“步骤”从查询列表中添加值

时间:2016-01-24 09:19:39

标签: arrays algorithm

我想知道是否有一种方法可以在一个数组中添加值,在[x, y]范围内(有一个查询列表),具有特定的“步骤”,比O(queries * (range_length / step))更快:你应该添加以下值:对于每个pos = x + k * step,其中k从0变为无穷大,pos <= yarray[pos] += value

我考虑过在另一个数组中添加值,如下所示:

auxarray[x] += value;
auxarray[y + 1] -= value;
for (int i = 1; i <= size; ++i) {
    auxarray[i] += auxarray[i - 1];
    array[i] += auxarray[i];
}

不幸的是,我不知道如何处理不应该添加值的单元格。

1 个答案:

答案 0 :(得分:0)

我不确定我的问题是否正确,但如果我这样做,为什么不这样做:

curr = x;
while (curr <= y) {
    array[curr] += value;
    curr += step;
}

关于faster than O(queries * range_length),我不认为这是可能的,尽管它是实际的:
O(查询*(range_length / step ))