-
-
Save murilomaeda/5b481f1d4815cf1f1ab8f0a84c78092c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//[ini,fim] é o intervalo representado pelo nó "pos" da seg | |
//queremos setar o intervalo [p,q] para ter pai igual a "val" | |
void update(int pos, int ini, int fim, int p, int q, int val) | |
{ | |
//se o [ini,fim] e [p,q] são disjuntos, não faz nada | |
if(p > fim || q < ini) return; | |
//se [ini,fim] está inteiramente contido no intervalo [p,q] | |
if(p <= ini && fim <= q) | |
{ | |
//com a observação, podemos só setar seg[pos] = val | |
//não é necessário descer para os filhos de pos | |
seg[pos] = min(seg[pos],val); | |
return; | |
} | |
int m = (ini + fim)/2; | |
int e = pos*2, d = pos*2 + 1; | |
//se não está inteiramente contido, desce até achar um que esteja inteiramente contido em [p,q]. | |
update(e,ini,m,p,q,val); | |
update(d,m+1,fim,p,q,val); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment