Привет, я изучаю дерево сегментов. Построение дерева отрезков рекурсивным методом мне понятно, я реализовал его так:
void build( int n, int b, int e){
if(b > e) return;
else if (b == e) { tree[n] = arr[b]; return }
build(n*2 , b , (b+e)/2 );
build(n*2+1 , (b+e)/2+1 , e );
tree[n] = tree[n*2] + tree[n*2 + 1] ;
}
но я видел такую реализацию шутера:
void build() { // build the tree
for (int i = n - 1; i > 0; --i) t[i] = t[i<<1] + t[i<<1|1];
}
i understand that t[i<<1] is same as t[2*i] and t[i<<1|1] is same as t[2*i+1]
но как эта логика помогает мне построить дерево сегментов?? простой пример был бы очень полезен