Ссылка: http://www.geeksforgeeks.org/segment-tree-set-1-sum-of-given-range/. Это цитируемый текст:
Начнем с отрезка arr [0., н-1]. и каждый раз, когда мы делим текущий сегмент на две половины (если он еще не стал сегментом длины 1), а затем вызывать одну и ту же процедуру на обеих половинах, и для каждого такого сегмента мы сохраняем сумму в соответствующем node. Все уровни построенного дерева сегментов будут полностью заполнены, за исключением последнего уровня. Кроме того, дерево будет полным двоичным деревом, потому что мы всегда разделяем сегменты на две половины на каждом уровне. Так как построенное дерево всегда является полным бинарным деревом с n листьями, будут n-1 внутренние узлы. Таким образом, общее число узлов будет 2n - 1. Высота дерева сегмента будет ceil [log (n)]. Поскольку дерево представлено с использованием массива, а отношение между родительским и дочерним индексами должно поддерживаться, размер памяти, выделенной для дерева сегментов, будет 2 * 2 ^ (ceil (log (n))) - 1.
Как выделяется память (последняя строка выше)? Как индексы родителя и ребенка хранятся в коде, если они верны? Пожалуйста, объясните это. Если это ложь, то какова правильная величина?