Documente Academic
Documente Profesional
Documente Cultură
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.
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)