Pagini recente » Diferente pentru utilizator/djok intre reviziile 66 si 67 | Paznici2 | Monitorul de evaluare | Autentificare | Diferente pentru monthly-2014/runda-5/solutii intre reviziile 10 si 11
Nu exista diferente intre titluri.
Diferente intre continut:
h1. 'Treesmen':problema/treesmen
Vom face o liniarizare a arborelui, cu ajutorul căreia vom efectua eficient cele două operaţii. Soluţia se bazează pe prima idee care ne vine în minte, adică, pentru prima operaţie facem update pe intervalul $[first[stramos], first[node]]$ si pentru a doua căutam ce valoare avem pe poziţia $first[node]$; dar, s-ar putea, ca la update să avem noduri care nu se află pe lanţ dar apar şi în interval. Plecând de la această observaţie ajungem la observaţia : aceste noduri vor avea $first-ul si last-ul$ incluse în $[first[stramos], first[node]]$. Astfel putem defini în $last[node] = suma valorilor când node nu a apare pe lanţ.$ Făcând această observaţie răspunsul pentru un query va fi $first[node] - last[node]$. Update-ul e o progresie arimetica, aşa că, nodul X o să crească cu valoarea $p + (nivel[X] - nivel[stramos])*r.$ Dacă desfacem paranteza si grupam termenii convenabil obtinem $p-nivel[stramos]*r + nivel[X]*r$. Astfel, problema devine la a face update pe un interval cu o valoare X; ne putem folosi de arbori de intervale sau arbori indexati binar.
Vom face o liniarizare a arborelui, cu ajutorul căreia vom efectua eficient cele două operaţii. Soluţia se bazează pe prima idee care ne vine în minte, adică, pentru prima operaţie facem update pe intervalul $[first[stramos], first[node]]$ şi pentru a doua căutam ce valoare avem pe poziţia $first[node]$; dar, s-ar putea, ca la update să avem noduri care nu se află pe lanţ dar apar şi în interval. Plecând de la această observaţie ajungem la observaţia : aceste noduri vor avea $first-ul si last-ul$ incluse în $[first[stramos], first[node]]$. Astfel putem defini în $last[node] = suma valorilor când node nu apare pe lanţ.$ Făcând această observaţie răspunsul pentru un query va fi $valoarea de pe poziţia first[node] - valoarea de pe poziţia last[node]$. Update-ul e o progresie arimetica, aşa că, nodul X o să crească cu valoarea $p + (nivel[X] - nivel[stramos])*r.$ Dacă desfacem paranteza şi grupăm termenii convenabil obţinem $p-nivel[stramos]*r + nivel[X]*r$. Astfel, problema se rezumă la a face update pe un interval cu o valoare $X$; ne putem folosi de arbori de intervale sau arbori indexati binar pentru a face acest lucru.
Complexitate $O(M * log N).$
==include(page="template/monthly-2014/footer")==
Nu exista diferente intre securitate.
Topicul de forum nu a fost schimbat.