Изменения

Перейти к: навигация, поиск

Реализация запроса в дереве отрезков снизу

278 байт убрано, 22:16, 5 сентября 2019
Правка пунктуации
Реализация запроса снизу вверх в дереве отрезков является, в отличие от [[Реализация запроса в дереве отрезков сверху| реализации запроса сверху вниз]], итеративным методом. Будем рассматривать абстрактную операцию, обладающую свойством ассоциативности, и обозначать ее <tex>a \circ b</tex>.
[[Дерево отрезков. Построение|Построим дерево отрезков]] , и установим границы отрезка на соответствующие им листья. Будем действовать в 3 этапа:
# Если элемент, попавший на левую границу, является правым сыном, то запишем в результат значение, полученное после выполнения нашей операции над предыдущим результатом и значением этого элемента, а левую границу перемещаем на один элемент вправо. Аналогично с правой границей (является ли она левым сыном). Таким образом мы учтем вклад нужной нам вершины и избавимся от вклада ненужного нам поддерева.
# Устанавливаем границы отрезка на родительские элементы текущих границ. Это позволит узнать, входит ли полученный отрезок в искомый или нет. Повторяем этап 1, пока границы не пересекутся.
Пусть результат считаем на отрезке <tex> [left, right] </tex>. При этом значения <tex>left</tex> и <tex>right</tex>, передающиеся в функцию, должны указывать на листья дерева (необходимо увеличить значение на индекс массива, с которого начинаются листья). Переменные <tex>leftRes</tex> и <tex>rightRes</tex> будут собирать значения на отрезках, отделившихся соответственно слева или справа от рассматриваемого.
'''int''' query(left : '''int''', right : '''int'''):
leftRes = ''neutral''
rightRes = ''neutral''
'''if''' right '''mod''' 2 == 1
rightRes = data[right] <tex> \circ </tex> rightRes
right = (right - 1) '''div''' 2- 1
'''if''' left == right
leftRes = leftRes <tex> \circ </tex> data[left]
'''return''' leftRes <tex> \circ </tex> rightRes
 
==См. также==
* [[Реализация запроса в дереве отрезков сверху]]
==Источники информации==
* [http://rain.ifmo.ru/cat/view.php/vis/trees/segment-2006/algorithm Алгоритм]
 
==См. также==
* [http://neerc.ifmo.ru/wiki/index.php?title=%D0%A0%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D0%B0_%D0%B2_%D0%B4%D0%B5%D1%80%D0%B5%D0%B2%D0%B5_%D0%BE%D1%82%D1%80%D0%B5%D0%B7%D0%BA%D0%BE%D0%B2_%D1%81%D0%B2%D0%B5%D1%80%D1%85%D1%83 Реализация запроса в дереве отрезков сверху]
 
[[Категория: Дискретная математика и алгоритмы]]
[[Категория: Дерево отрезков]]
Анонимный участник

Навигация