Diferente pentru preoni-2007/runda-4/solutii intre reviziile #14 si #15

Nu exista diferente intre titluri.

Diferente intre continut:

Vom calcula in timp liniar urmatorul vector:
$urm{~i~} = min { j / i < j AND A{~j~} = A{~i~}}$
Astfel, $urm{~i~}$ va fi prima pozitie din dreapta egala ca valoare cu elementul de pe pozitia $i$ (daca nu exista $urm{~i~}$ consideram ca $urm{~i~}$ este egal cu $N+1$). Considerand $N$ puncte in plan cu coordonatele $(i, urm{~i~})$
Astfel, $urm{~i~}$ va fi prima pozitie din dreapta egala ca valoare cu elementul de pe pozitia $i$ (daca nu exista $urm{~i~}$ consideram ca $urm{~i~}$ este egal cu $N+1$). Considerand $N$ puncte in plan cu coordonatele $(i, urm{~i~})$ la care se ataseaza valoarea $A{~i~}$ o intrebare $st &le; dr$ se rezolva facand un query in dreptunghiul $[st..dr] x [dr+1..N]$, adica suma acelor elemente care se afla in interval, iar urmatoarea aparitie la dreapta este in afara intervalului. Acest query ne garanteaza ca se va face doar suma elementelor distincte din intervalul $st..dr$. O rezolvare care imparte vectorul in bucati de $radic;N$ si rezolva intrebarile in $O(&radic;N)$ ar fi obtinut cel putin $50$ de puncte, desi este probabil sa obtina si punctaj maxim optimizand codul. O rezolvare mai buna din punct de vedere al complexitatii este folosirea arborilor de intervale, tehnica descrisa 'aici':downloads?action=download&file=arbori_de_intervale.zip si care poate fi folosita si la rezolvarea problemei 'Zoo':problema/zoo. Din pacate, aceasta solutie este greu de implementat, iar solutia in $O(lg{^2^} N)$ probabil ar fi fost prea inceata pentru a obtine punctaj maxim.
h2. 'Laser':problema/laser

Nu exista diferente intre securitate.

Topicul de forum nu a fost schimbat.