Обновление диапазона в двоичном индексированном дереве
Как я могу использовать двоичное индексированное дерево для обновления диапазона, чтобы каждый элемент A[k]
в диапазоне говорят [i..j]
обновляется до A[k]*c
где c
некоторая константа.
И мне нужно делать точечные запросы после таких операций обновления.
Я попробовал с функцией ниже, но она не работала, здесь n
это размер массива,c
константа, на которую я хочу умножить каждый элемент диапазона.
def updateM(x, c, n):
while x <= n:
BIT[x] *= c
x += (x & -x)
и это мои звонки для обновления ассортимента:
updateM(i, c, n)
updateM(j+1, -c, n)
Любая помощь будет оценена.:)
2 ответа
Мультипликативное обратное c
не является -c
но 1/c
, Кроме того, я не понимаю, чего вы пытаетесь достичь x += (x & -x)
,
Это просто. Вы просто должны запустить цикл.
Но этот метод более чем убит.
Было бы лучше использовать дерево сегментов и обновить соответствующий диапазон, а не только одно значение.