Столкнулся со следующей задачей.
Есть N отрезков, для каждого отрезка известны координаты начала и конца. Также имеется неограниченное количество контейнеров. Отрезки можно разместить в одном контейнере, если они не пересекаются, при этом двигать отрезки нельзя. Необходимо минимизировать количество контейнеров. Помогите найти оптимальный алгоритм решения.
Данные для задачи:
Первое число N — количество отрезков(1 <= N <= 1000), далее N пар чисел — координата начала и координата конца каждого отрезка. В качестве ответа — количество контейнеров и для каждого контейнера номера отрезков которые попали в этот контейнер. Пример:
Ввод:
5
1 5
2 3
6 8
4 7
9 10
Вывод:
2 - количество контейнеров
2 4 5 - номера отрезков в первом контейнере
1 3 - номера отрезков во втором контейнере
$$$O(N \log N)$$$
Большое Вам спасибо))
Пожалуйста :)
Можно написать еще такое жадное решение: для решения необходимо поддерживать множество созданных контейнеров, отсортированное по самой правой границе отрезке, который в них находится. Тогда, если обрабатывать отрезки в порядке неубывания левой границы, контейнер, в который нужно положить текущий отрезок, можно искать бинарным поиском (если бинарный поиск не найдет подходящий контейнер, нужно добавит новый).