посев травы
[Условие задачи](sic 2100)
Условие
Дан массив координат посевов () и число . Известно, что за одну минуту трава распространяется по грядке на целый метр в обе стороны! Найдите минимальное необходимое количество минут, чтобы трава заняла как минимум метров грядки.
Примеры
| входные данные | выходные данные |
|---|---|
| 3 1 3 9 9 | 2 |
Решение
Решение
Рост условной зоны из травы можно представить как отрезок. Сначала у одного саженца отрезок длины , потом , потом и так далее. Основная проблема заключается в том, что отрезки саженцев могут пересечься между собой. В таком случае нам надо не считать пересечения по несколько раз.
Так как может быть большим, то проблематично разобрать попарно пересечения, особенно если мы не знаем их границы, но пересечение отрезков с уже известными границами найти легко!
Поэтому сделаем бинпоиск по ответу. Пусть прошло ровно минут. Каждый посев занимает отрезок . Пересечение отрезков это стандартная задача на сканлайн. Представим каждый отрезок, как два события :
- Открытие
(x_i - t, open) - Закрытие
(x_i + t, close)
Отсортируем события по координате. Будем постепенно обрабатывать события, поддерживая количество открытых отрезков и координату последнего события.
Так как задача о нахождение площади пересечений отрезков является базовой и решается за . То итоговая задача имеет асимптотику .