Изменения

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

Дерево отрезков. Построение

672 байта добавлено, 13:17, 1 июня 2013
Псевдокод
<code>
addElement(Tree, ver, x)
if Tree.isFullBinary(ver) roots[ver + 1] Node tmpRoot = new Node(); roots[ver Tree.countOfVersions() + 1]= recAdd(tmpRoot, null, 0, 2 * Tree.L = roots[size(ver]), x, Tree.L; roots[size(ver ) + 1].R = roots[ver].R);
else
// k : 2 ^ (k - 1) <= Tree.size(ver) < 2 ^ k roots[ver Tree.countOfVersions() + 1] = recAdd(roots[ver], null, 0, 2 ^ k, x, Tree.size(ver) + 1); Node recAdd(node, parent, l, r, x, n) // Мы находимся в узле node, который отвечает за полуинтервал (l, r] if r - l == 1 return new Node(parent, x) m = (l + r) / 2; if node == null Node tmp = new Node(parent); node = tmp; else Node tmp = node.clone(); if n <= m tmp.L = recAdd(node.L, tmp, l, m, x, n); else tmp.R = recAdd(node.R, tmp, m, r, x, n); tmp.valueOfFunction = f(tmp.L, tmp.R); return tmp;
</code>
38
правок

Навигация