Sunteți pe pagina 1din 1

Problema ksecv - descrierea solutiei

Solutia 1 ( complexitate O(n * n) )

Pentru fiecare i=1..n, se determina cel mai din dreapta j cu i < j astfel incat a[i], a[i+1], ..., a[j] sa fie k-
secventa.

Solutia 2 ( complexitate O(n log k) )

Initial se identifica k-secventa care incepe cu x = a[1]. Secventa este de forma a[1], a[2], ..., a[j]. Cele cel
mult k valori strict mai mari decat a[1] din k-secventa se memoreaza intr-un min-heap. Pentru fiecare i
intre 2 si n, apar doua cazuri:

- a[i] <= x : atunci pentru acea valoare nu se calculeaza k-secventa deoarece nu are rost; x fiind mai
mare, atunci in k-secventa care incepe cu x intra si acest a[i]

- a[i] > x : vom extrage in acest caz din min-heap toate valorile mai mici sau egale cu a[i], raman doar
cele strict mai mari; noul x devine acum acest a[i] si vom parcurge in continuare cu j (de unde a ramas la
pasul anterior) pentru a completa min-heapul cu alte valori cel mult k valori strict mai mari decat noul x.

La fiecare pas se actualizeaza, daca este cazul, lungimea maxima a k-secventei. Fiecare element al sirului
se adauga cel mult o data in min-heap si este extras cel mult o data. Operatiile cu min-heapul de
introducere si extragere se executa in O(log k)

S-ar putea să vă placă și