Изменения

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

Навигация