Skip to content

Instantly share code, notes, and snippets.

@Rockbet
Last active June 17, 2019 21:58
Show Gist options
  • Save Rockbet/ec0be28a4a4530359aafdb6496f05a86 to your computer and use it in GitHub Desktop.
Save Rockbet/ec0be28a4a4530359aafdb6496f05a86 to your computer and use it in GitHub Desktop.
// Os parametros da função build são:
// O índice do nó atual, o l e o r do intervalo representado pelo nó.
void build(int node, int l, int r){
// Se o nó atual é uma folha:
// O valor desse nó é simplesmente vet[l], ou vet[r], e então retorno a função.
if(l==r){
tree[node]=vet[l];
return;
}
// Caso contrário, declararemos mid como o índice que divide o nó atual em duas metades.
int mid = (l+r)/2;
// Chamaremos a função build para as duas metades, que são:
// O filho da esquerda: Com nó 2*node+1 e com intervalo de l até mid.
// O filho da direita: Com nó 2*node+2 e com intervalo mid+1 até r.
build(2*node+1,l,mid);
build(2*node+2,mid+1,r);
// Após termos calculado a resposta dos dois filhos do nó atual
// saberemos a resposta dele, que é a soma dos valores dos seus filhos.
// Lembrando que 2*node+1 é o nó do filho da esquerda e 2*node+2 o da direita.
tree[node] = tree[2*node+1] + tree[2*node+2];
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment