Обновление диапазона в двоичном индексированном дереве

Как я могу использовать двоичное индексированное дерево для обновления диапазона, чтобы каждый элемент 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),

Это просто. Вы просто должны запустить цикл.

Но этот метод более чем убит.

Было бы лучше использовать дерево сегментов и обновить соответствующий диапазон, а не только одно значение.

Другие вопросы по тегам