Ctrl K

Самый узкий отрезок для каждой точки

Сложная
Дан список отрезков ranges, где ranges[i] = [lo, hi] — все целые числа от lo до hi включительно. Длина отрезка — количество целых чисел в нём, то есть hi - lo + 1. Дан также список точек points. Для каждой точки найдите самый короткий отрезок, который её содержит, и запишите его длину. Если точку не содержит ни один отрезок, запишите -1. Верните ответы в порядке точек.
Пример 1
ranges=[[3, 9], [5, 6], [8, 8], [1, 4]], points=[5, 8, 2, 12] → [2, 1, 4, -1]

Точку 5 накрывают [3, 9] и [5, 6], уже второй — длина 2. Точку 8 накрывает отрезок [8, 8] длины 1. Точку 2 — только [1, 4], длина 4. Точку 12 не накрывает ничего.

Пример 2
ranges=[[10, 20]], points=[20, 21, 10] → [11, -1, 11]

Концы входят в отрезок, поэтому 20 и 10 накрыты (длина 11), а 21 — нет.

Ограничения
  • 1 ≤ len(ranges) ≤ 10⁵
  • 1 ≤ len(points) ≤ 10⁵
  • 1 ≤ lo ≤ hi ≤ 10⁷
  • 1 ≤ points[j] ≤ 10⁷
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиВторое большее справа СложнаяK-е по величине в упорядоченной таблице Средняяk ближайших значений СредняяДроби из простых чисел СредняяТри подсказки при наборе Средняя
загружаем Python…
Вход
ranges=[[3, 9], [5, 6], [8, 8], [1, 4]], points=[5, 8, 2, 12]
Ожидается
[2, 1, 4, -1]

«Запустить» — первые 3 теста у тебя в браузере, «Отправить» — все 105 тестов на сервере, включая скрытые.