Zacznijmy od tego co to jest kolejka monotoniczna, jest to struktura danych, na której chcemy trzymać minimum/maximum itp. Na przedziale, który pełznie jak gąsienica. Sama jej idea jest bardzo prosta. Załóżmy że chcesz mieć kolejkę monotoniczna minów. Jeśli dodajesz jakiś element A[i], to wywalasz wszystkie elementy > A[i], bo one nigdy nie będą minem. Jeśli usuwasz element to sprawdzasz czy najmniejszy na całej kolejce = A[i], jak tak to go usuwasz. A odwołanie do mina to Q.front(),o ile implementujesz na deque w c++. Te procedury dodaj, usuń, odczytaj mina mają po kilka linijek, to jest naprawdę takie proste.
Zadania na nią to np:
- Temperatura OI
- Wilcze Doły OI
- Fajnym ćwiczeniem jest zadanie: masz tablice A, dla każdego elementu wyznacz pierwszy mniejszy na lewo. (Można też drzewem przedziałowym)
- Jest też bardzo fajne zadanie Prawnicy z OI, ono nie jest na kolejkę monotoniczna, ale bardzo polecam.
Warte podkreślenia jest, że kolejkę monotoniczna można praktycznie zawsze zastąpić setem/multisetem, ale jest wolniejsze bo dziala w logu.