У нас есть массив arr[0 . . . n-1]
, Мы должны быть в состоянии
arr[i] = x
где 0 <= я <= n-1.Это может быть эффективно решено с помощью дерева сегментов.
Но как решить противоположное этому, т.е.
array arr[i] = x
где 0 <= я <= n-1.Как эффективно решить вышеуказанный вопрос, как дерево сегментов?
Предполагая, что вы можете легко вычислить сумму (L, R) с помощью дерева сегментов.
Сначала вычислите общую сумму всего массива, названного total
,
Для изменения в arr
в положении ih
Обновите дерево сегментов как обычно.
Обновить total = total - oldValue + newValue
,
Для каждого запроса выведите total - sum(L,R)
Примечание: мы можем использовать двоичное индексированное дерево (a.k.a Дерево Фенвика) для этой проблемы тоже, которая ИМО, больше подходит.