Construção recursiva de uma árvore balanceada a partir de somas de prefixos
C++
Hard
recursion
Tarefa «Construção recursiva de uma árvore balanceada a partir de somas de prefixos»
Dado um array de inteiros A de tamanho N. É necessário construir recursivamente uma árvore binária, onde cada nó contém a soma de prefixo dos elementos no intervalo [l, r), bem como os índices l e r. A raiz corresponde ao intervalo [0, N). Divida recursivamente o intervalo pela metade (metade esquerda [l, mid), metade direita [mid, r)), até que o comprimento do intervalo seja 1. Para cada nó, calcule a soma dos elementos em seu intervalo. Imprima a árvore em ordem de travessia em profundidade (pre-order): para cada nó, imprima l, r e a soma. Use recursão. N <= 100, números no array em módulo <= 10^6.
Formato de Entrada
Primeira linha: inteiro N (1 <= N <= 100). Segunda linha: N inteiros A[i] (-10^6 <= A[i] <= 10^6).
Formato de Saída
Para cada nó na ordem pre-order, imprima três números: l, r, sum. Cada nó em uma linha separada. Se o intervalo estiver vazio (l == r), não imprima nada.
Exemplos
Exemplo 1
ENTRADA
4
1 2 3 4
SAÍDA
0 4 10
0 2 3
0 1 1
1 2 2
2 4 7
2 3 3
3 4 4
Exemplo 2
ENTRADA
2
-5 5
SAÍDA
0 2 0
0 1 -5
1 2 5
main.cpp