Pokud ve svém řešení teoretické úlohy chcete použít nějaký základní
algoritmus, jako třeba binární vyhledávání v uspořádaném poli, nemusíte
ho detailně popisovat. Někdy ale nemusí být jasné, které algoritmy jsou
„dostatečně základní“.
Uvádíme proto seznam algoritmů a datových struktur, které v MO-P
považujeme za natolik známé, že se na ně v řešení stačí odkázat a není
potřeba uvádět detaily. Pokud si algoritmus potřebujete nějak
přizpůsobit, stačí popsat pouze změny od základní verze.
Find: Nalezení reprezentanta množiny obsahující
daný vrchol v amortizovaně\mathcal{O}(\alpha(n)), kde \alpha je inverzní Ackermannova
funkce, která sice roste do nekonečna, ale mnohem pomaleji než
logaritmus.
Union: Sjednocení dvou množin obsahujících vrcholy
u a v
v amortizovaně\mathcal{O}(\alpha(n))
Pro zvolenou asociativní operaci (minimum, maximum, součet, …) a
posloupnost prvků x_1,\ldots,x_n
Build: Vybudování v \mathcal{O}(n)
Query: Určení hodnoty operace provedené na všechny
prvky s indexy v daném intervalu v \mathcal{O}(\log n)
UpdatePoint: Aktualizace prvku v \mathcal{O}(\log n)
Je-li operace minimum, maximum či součet, můžete dále bez popisu
používat i operaci UpdateRange: Ke všem hodnotám s
indexy v daném intervalu přičte zadané číslo, pracuje v čase \mathcal{O}(\log n).
Potřebuje-li vaše řešení operaci UpdateRange v jiných situacích
(jiná asociativní operace, jiný druh změny hodnot na intervalu), musíte
vysvětlit, jak ji implementujete.