Распоред
Аутор: Павле Мартиновић
Текст и тест примери: Софија Чебашек, Марко Трајковић
Анализа решења: Марко Трајковић
Тестирање: Алекса Милисављевић
Решење када је L_{j,i}=R_{j,i}
У овом подзадатку сваки туриста ће желети да посети сваки експонат у тачно једном тренутку. Решење ће постојати ако и само ако за сваки експонат, сви туристи желе да га посете у истом тренутку и тренуци посете свих експоната чине пермутацију бројева од 1 до N.
Временска сложеност: O(NM)
Решење када je N,M\leq10
Уколико решење постоји, тренуци у којима смо посећивали експонате ће чинити пермутацију бројева од 1 до N. За сваку пермутацију можемо проверити да ли испуњава жеље свих туриста. Уколико таква пермутација постоји, она ће бити решење, у супротном, нема решења.
Временска сложеност: O(N!\cdot NM)
Решење када je N\leq 10
Време посете сваког експоната ће припадати одговарајућим интервалима свих туриста, па ће припадати и њиховом пресеку. Прецизније, сваки експонат ће припадати интервалу [l_i,r_i] где је:
Уколико за неки експонат важи l_i>r_i решење не постоји, у супротном, као у претходном подзадатку, за сваку пермутацију t можемо проверити да ли испуњава услове, тј. да ли важи l_i\leq t_i \leq r_i.
Вредности l_i и r_i ћемо у наставку називати лева граница и десна граница експоната i.
Временска сложеност: O(N!\cdot N + NM)
Решење када je M=1 и L_{j,i}=1
Приметимо да нам се увек исплати да прво посећујемо експонате са најмањим r_i које нисмо посетили до сада. Сортирамо експонате по десној граници. Облазићемо их редом од оних са најмањом ка онима са највећом десном границом. Уколико овакав обилазак задовољава услове, он ће бити решење. У супротном, решење не постоји.
Временска сложеност: O(NM+N\log N)
Решење када je M=1 и R_{j,i}-L_{j,i}\leq1
Посматрајмо експонат који ћемо прво посетити. За њега мора да важи l_i=1. Аналогно претходном подзадатку, изабраћемо онај са најмањим r_i. Кренућемо редом, од првог до N-тог тренутка. У i-том тренутку ћемо посматрати непосећене експонате којима је лева граница i или i-1 тј. оне чији интервали садрже тренутак i. Изабраћемо онај са најмањом десном границом. Уколико такав експонат не буде постојао у неком тренутку, нема решења. У супротном, конструисали смо једно решење.
Временска сложеност: O(NM+N\log N)
Решење када je N\leq1000
Можемо уопшити решење претходног подзадатка. Разматраћемо тренутке редом, од првог до n-тог као у прошлом подзадатку. У i-том тренутку ћемо изабрати експонат са најмањом десном границом међу свим експонатима које нисмо посетили и чији интервали садрже тренутак i. Ако такав експонат не постоји, нема решења, а у супротном смо овим поступком конструисали једно решење.
Временска сложеност: O(NM+N^2)
Главно решење
Приметимо да експонате можемо сортирати по њиховој левој граници и обрађивати у том редоследу. Оваквим приступом и коришћењем структура std::set или std::priority_queue можемо ефикасно чувати све експонате у чијим интервалима је тренутак i као и ефикасно наћи онај са најмањом десном границом.
Временска сложеност: O(NM+N\log N)