Изменения

Перейти к: навигация, поиск
update
Процедура обновления на отрезке. Данная процедура выполняет разбиение текущего отрезка на подотрезки и обновление в них несогласованности. Очень важно выполнить push как только идет рекурсивный вызов от детей, чтобы избежать некорректной обработки в детях. И так как значение в детях могло измениться, то необходимо выполнить обновление ответа по операции <tex>\oplus</tex> на текущем отрезке.
'''void ''' update(int node, int a, int b, T val) { <font color=green> // val - значение, которое поступило в качестве параметра на запрос, a и b - границы запроса</font>
l = tree[node].left;
r = tree[node].right;
push(node);
<font color=green>// Обновление детей</font>
update(2 * node + 1, a, b, val);
update(2 * node + 2, a, b, val);
<font color=green>// Пересчет значения на текущем отрезке</font>
tree[node].ans = (tree[2 * node + 1].ans <tex>\odot</tex> tree[2 * node + 1].d) <tex>\oplus</tex>
(tree[2 * node + 2].ans <tex>\odot</tex> tree[2 * node + 2].d);
Анонимный участник

Навигация