Интервалы: покрытие и расписание на Python: как решать + 9 задач с проверкой

Интервалы — это отрезки на прямой или промежутки времени вида [l, r]: фонарь светит на кусок дороги, ремонт перекрывает участок, док занят с t1 до t2, доклад идёт в аудитории с a до b. В олимпиадных задачах чаще всего просят покрыть весь отрезок минимальным числом интервалов или составить расписание: выбрать максимум непересекающихся событий, проверить конфликты, посчитать минимальное число кабинетов/причалов.

Как понять, что это «интервалы: покрытие и расписание»:

Суть приёма: мы сортируем интервалы и дальше идём жадно или «сканируем» события. Для покрытия обычно держим текущую покрытую границу и среди всех интервалов, которые начинаются не правее неё, берём тот, у которого самый дальний правый конец — так делаем минимум шагов. Для расписаний часто сортируют по времени окончания (чтобы набрать максимум непересекающихся) или делают «линейный проход» по событиям начала/конца (чтобы найти пиковое число одновременно идущих дел). Это ускоряет решение до O(n log n) вместо перебора всех сочетаний.

С чего начать учиться:

Ниже — задачи с автопроверкой и разбором подхода по теме интервалов.

Задачи по теме «Интервалы: покрытие и расписание»

Смежные темы

Весь каталог задач

Куда дальше