Mistrz Programowania

Mistrz Programowania 2023 runda 3 poziom e
Tagi: drzewa przedziałowe
Autor omówienia: Mikołaj Bulge
Treść

Omówienie zadania Platforma

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:

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))$.