посев травы

[Условие задачи](sic 2100)

Условие

Дан массив координат посевов () и число . Известно, что за одну минуту трава распространяется по грядке на целый метр в обе стороны! Найдите минимальное необходимое количество минут, чтобы трава заняла как минимум метров грядки.

Примеры

входные данныевыходные данные
3
1 3 9
9
2

Решение

Решение

Рост условной зоны из травы можно представить как отрезок. Сначала у одного саженца отрезок длины , потом , потом и так далее. Основная проблема заключается в том, что отрезки саженцев могут пересечься между собой. В таком случае нам надо не считать пересечения по несколько раз.

Так как может быть большим, то проблематично разобрать попарно пересечения, особенно если мы не знаем их границы, но пересечение отрезков с уже известными границами найти легко!

Поэтому сделаем бинпоиск по ответу. Пусть прошло ровно минут. Каждый посев занимает отрезок . Пересечение отрезков это стандартная задача на сканлайн. Представим каждый отрезок, как два события :

  1. Открытие (x_i - t, open)
  2. Закрытие (x_i + t, close)

Отсортируем события по координате. Будем постепенно обрабатывать события, поддерживая количество открытых отрезков и координату последнего события.

Так как задача о нахождение площади пересечений отрезков является базовой и решается за . То итоговая задача имеет асимптотику .