Skip to content

Instantly share code, notes, and snippets.

@luciocf
Last active October 22, 2019 18:25
Show Gist options
  • Save luciocf/92bcd510748355c69d55f19d8e39a03c to your computer and use it in GitHub Desktop.
Save luciocf/92bcd510748355c69d55f19d8e39a03c to your computer and use it in GitHub Desktop.
Ideia Noic 11 - Merge Sort Tree
// Ideia Noic 11 - Merge Sort Tree
// Função query()
// calcula a quantidade de valores > x no intervalo [a, b] do vetor
int query(int node, int l, int r, int a, int b, int x)
{
// estamos fora do intervalo
if (l > b || r < a) return 0;
// tree[node].end() aponta após a ultima posição do vector
// logo, se subtrairmos deste ponteiro o primeiro iterador > x no vector,
// encontraremos a resposta para este nó
if (l >= a && r <= b)
return tree[node].end()-upper_bound(tree[node].begin(), tree[node].end(), x);
int mid = (l+r)>>1;
// fazemos a recursão para os filhos do nó
return (query(2*node, l, mid, a, b, x)+query(2*node+1, mid+1, r, a, b, x));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment