我想知道是否有一种方法可以在具有特定“步骤”的[x, y]
(有一个查询列表)范围内,以比O(queries * (range_length / step))
更快的速度向数组中添加值:对于每个pos = x + k * step
,其中k
从0变为无穷大,pos <= y
,array[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];
}
不幸的是,我不知道该如何处理不应该添加值的单元格。
最佳答案
我不确定我的问题是对的,但是如果我知道为什么不做:
curr = x;
while (curr <= y) {
array[curr] += value;
curr += step;
}
关于
faster than O(queries * range_length)
,我认为这是不可能的,尽管事实上:o(查询*(范围长度/步骤)