Похоже, есть только одна хорошая статья о ленивом распространении в Сегментном Дереве на весь интернет, и это: http://www.spoj.pl/forum/viewtopic.php?f=27&t=8296
Я понял концепцию обновления только запроса node и маркировки его дочернего элемента. Но мой вопрос заключается в том, что если я сначала запрошу дочерний node и родительский node.
В этом дереве (наряду с расположением в массиве кучи)
0->[0 9]
1->[0 4] 2->[5 9]
3->[0 2] 4->[3 4] 5->[5 7] 6->[8 9]
.....................................
Первый запрос, если я обновляю [0 4], его данные будут изменены, а его дочерний элемент будет помечен. Второй запрос - состояние чтения сегмента [0 9].
Здесь я столкнулся с проблемой. Моя реализация дерева сегментов такова, что значение каждого node является суммой его левого и правого дочерних элементов. Поэтому, когда я обновляю значение node, я должен обновить его всех родителей. Чтобы исправить логическую проблему, теперь я обновляю весь родительский элемент node (пока он не достигнет корня дерева). Но это приводит к сбору данных, и вся моя цель использования дерева сегментов для быстрого пакетного обновления убивается.
Может кто-нибудь объяснить, где я ошибаюсь в использовании дерева сегментов?