Несогласованные поддеревья. Реализация массового обновления — различия между версиями
(→Несогласованные поддеревья) |
Rybak (обсуждение | вклад) |
||
| Строка 1: | Строка 1: | ||
== Несогласованные поддеревья == | == Несогласованные поддеревья == | ||
| − | В несогласованном поддереве дерева отрезков в вершинах хранятся не истинные значения сумм на отрезках (по операции <tex>\oplus</tex>). При этом в корне поддерева, которому соответствует отрезок <tex>a_i..a_j</tex> хранится несогласованность <tex>d</tex>. Для того чтобы узнать истинное значение нужно «собрать» все несогласованности на пути от вершины к корню дерева: <tex>b_i = b'_i \odot \left(\bigodot\limits_k d_k \right)</tex>. То есть для этого необходимо, чтобы вторая операция <tex>\odot</tex> была ассоциативной. | + | В несогласованном поддереве дерева отрезков в вершинах хранятся не истинные значения сумм на отрезках (по операции <tex>\oplus</tex>). При этом в корне поддерева, которому соответствует отрезок <tex>a_i..a_j</tex> хранится несогласованность <tex>d</tex>. Для того чтобы узнать истинное значение нужно «собрать» все несогласованности на пути от вершины к корню дерева: <tex>b_i = b'_i \odot \left(\bigodot\limits_k d_k \right)</tex>. То есть для этого необходимо, чтобы вторая операция <tex>\odot</tex> была ассоциативной. Если в вершине хранится истинное значение суммы, то |
| + | <tex>d = \perp</tex> {{---}} нейтральный элемент относительно операции <tex>\odot</tex>. | ||
== Массовые операции == | == Массовые операции == | ||
| + | |||
| + | Рассмотрим два примера: присваивание на отрезке и прибавление на отрезке. | ||
| + | |||
| + | === Присваивание === | ||
| + | |||
| + | <tex>a[i]..a[j] \leftarrow c</tex> | ||
| + | |||
| + | Для того, чтобы присвоить всем элементам на отрезке новое значение, его нужно, как в обычном запросе разбить на <tex>log n</tex> отрезков, | ||
| + | которые соответствуют некоторым вершинам, и в соответствующие узлы добавить несогласованность: <tex>d_k \leftarrow c</tex>. | ||
Версия 05:36, 17 апреля 2011
Несогласованные поддеревья
В несогласованном поддереве дерева отрезков в вершинах хранятся не истинные значения сумм на отрезках (по операции ). При этом в корне поддерева, которому соответствует отрезок хранится несогласованность . Для того чтобы узнать истинное значение нужно «собрать» все несогласованности на пути от вершины к корню дерева: . То есть для этого необходимо, чтобы вторая операция была ассоциативной. Если в вершине хранится истинное значение суммы, то — нейтральный элемент относительно операции .
Массовые операции
Рассмотрим два примера: присваивание на отрезке и прибавление на отрезке.
Присваивание
Для того, чтобы присвоить всем элементам на отрезке новое значение, его нужно, как в обычном запросе разбить на отрезков, которые соответствуют некоторым вершинам, и в соответствующие узлы добавить несогласованность: .