Rozwiązaniem założonym przez autora było utworzenie drzewa przedziałowego punkt–przedział, które umożliwia wykonanie operacji dodania w punkcie oraz którego każdy węzeł zna sumę swojego poddrzewa. W węzłach drzewa początkowo znajduje się wartość $0$. Po pojawieniu się na platformie wartości $x$, należy dodać $1$ do $x$-tego liścia. Teraz, aby znaleźć $k$-tą najmniejszą wartość spośród dotychczas dodanych do drzewa, należy wykonać poniższy algorytm:
cnt
= $k$cnt
, to przejdź do niego. W przeciwnym wypadku odejmij od cnt
sumę lewego poddrzewa i przejdź do prawego poddrzewa.W ten sposób po dodaniu każdego elementu można łatwo znaleźć $\frac{n}{2}$-tą najmniejszą wartość (oraz $\frac{n}{2}+1$, jeśli potrzeba).
Alternatywnie do rozwiązania zadania można użyć struktury ordered_set
, która jest opisana w tym linku.
Oba rozwiązania mają jednakową złożoność obliczeniową, która wynosi $\Theta(n\cdot log_2(n))$.