Изменения

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

Многомерное дерево отрезков

1 байт убрано, 17:32, 6 июня 2015
Построение
Еще один момент, в которых отличается реализация {{---}} передаваемые в функцию параметры. В многомерном случае кроме всего прочего следует также передать рассматриваемое <tex>p-i+1</tex>-мерное дерево (или кортеж из чисел, указывающих на соответствующие элементы массива), а также область, которую следует рассматривать (или <tex>p-i+1</tex> пар чисел, обозначающих отрезки на соответствующих координатных осях). Все остальные детали реализации остаются такими же как и в одномерном дереве отрезков.
В каждом нижеприведенном псевдокоде будут встречены обозначения:* индекс <tex>\varepsilonmathtt{P}</tex> {{---}} нейтральный элементразмерность массива из условия задачи,
* <tex>\mathtt{\odot}</tex> {{---}} та операция, которую мы считаем на данном многомерном дереве отрезков.
В каждом нижеприведенном псевдокоде будет встречен индекс <tex>\mathtt{P}varepsilon</tex> {{---}} размерность массива из условия задачинейтральный элемент.
'''for''' I = 1..n
'''if''' xILeft != xIRigth
t[x1][x2]...[xP][node] = t[x1][x2]...[xI * 2 + 1]...[node] <tex>\timesodot</tex> t[x1][x2]...[xI * 2 + 2]...[node]
'''return'''
t[x1][x2]...[xP][node] = newElem.value
'''if''' последняя координата
'''for''' I = 1..n
'''if''' xILeft != xIRigthxIRight t[x1][x2]...[xP][node] = t[x1][x2]...[xI * 2 + 1]...[node] <tex>\timesodot</tex> t[x1][x2]...[xI * 2 + 2]...[node]
'''return'''
t[x1][x2]...[xP][node] = data[x1Left][x2Left]...[xPLeft][node]
Анонимный участник

Навигация