Skip to content

Instantly share code, notes, and snippets.

@Rockbet
Last active July 24, 2019 03:56
Show Gist options
  • Save Rockbet/306d29ecf172a0890ec167b4f0227636 to your computer and use it in GitHub Desktop.
Save Rockbet/306d29ecf172a0890ec167b4f0227636 to your computer and use it in GitHub Desktop.
// Os parametros da função Query são:
// O nó atual, tl e tr, o intervalo que o nó atual abrange, l e r, o intervalo que queremos calcular.
int query(int node, int tl, int tr, int l, int r){
// Se o intervalo que o nó atual abrange estiver totalmente fora do intervalo de l até r, retornaremos 0.
// Então, ou o início do intervalo do nó atual é maior que o fim dp intervalo que queremos calcular, ou
// o fim do intervalo do nó atual é menor que o início do intervalo que queremos calcular.
if(r<tl or l>tr) return 0;
// Se o intervalo que o nó atual representa estiver totalmente dentro do intervalo de l até r, então
// retornaremos o valor do nó atual.
if(l<=tl and r>=tr) return tree[node];
// Caso contrário, declararemos mid como o índice que divide o nó atual em duas metades.
int mid = (tl+tr)>>1;
// Retornamos como resposta a soma da resposta dos filhos do nó atual.
return query(2*node+1, tl, mid, l, r)+query(2*node+2, mid+1, tr, l, r);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment