Несогласованные поддеревья. Реализация массового обновления — различия между версиями
Rybak (обсуждение | вклад) м (→Присваивание) |
Rybak (обсуждение | вклад) (→Присваивание) |
||
Строка 12: | Строка 12: | ||
<tex>a[i]..a[j] \leftarrow c</tex> | <tex>a[i]..a[j] \leftarrow c</tex> | ||
− | Для того, чтобы присвоить всем элементам на отрезке новое значение, нужно этот отрезок разбить, как в обычном запросе, на <tex>\operatorname {log}n</tex> отрезков, и в соответствующие узлы добавить несогласованность: <tex>d_k \leftarrow c</tex>. | + | Для того, чтобы присвоить всем элементам на отрезке новое значение, нужно этот отрезок разбить, как в обычном запросе, на <tex>\operatorname {log}n</tex> отрезков, и в соответствующие узлы добавить несогласованность: <tex>d_k \leftarrow d_k \odot c</tex>. |
Версия 00:13, 18 апреля 2011
Несогласованные поддеревья
В несогласованном поддереве дерева отрезков в вершинах хранятся не истинные значения сумм на отрезках (по операции
). При этом в корне поддерева, которому соответствует отрезок хранится несогласованность . Для того чтобы узнать истинное значение нужно «собрать» все несогласованности на пути от вершины к корню дерева: . То есть для этого необходимо, чтобы вторая операция была ассоциативной. Если в вершине хранится истинное значение суммы, то — нейтральный элемент относительно операции .Массовые операции
Рассмотрим два примера: присваивание на отрезке и прибавление на отрезке.
Присваивание
Для того, чтобы присвоить всем элементам на отрезке новое значение, нужно этот отрезок разбить, как в обычном запросе, на
отрезков, и в соответствующие узлы добавить несогласованность: .