Ctrl K

Первая общая крыша

Сложная
Вдоль улицы стоят дома, roofs[i] — высота крыши дома i (нумерация с нуля). Паркурщик может перепрыгнуть с крыши i на крышу j, только если j правее (i < j) и выше (roofs[i] < roofs[j]). Прыжков можно делать сколько угодно. В запросе pairs[q] = [a, b] один человек стоит на крыше a, другой — на крыше b. Найдите самую левую крышу, на которой они могут встретиться: каждый либо уже стоит на ней, либо может на неё попасть. Если такой крыши нет, ответ -1. Верните массив ответов на все запросы в том же порядке.
Пример 1
roofs=[3, 7, 2, 5, 9, 4], pairs=[[0, 2], [1, 3], [4, 5], [5, 5]] → [3, 4, -1, 5]

Пара 0 и 2: с крыши 0 (высота 3) нельзя перейти на крышу 2 (высота 2), но крыша 3 высотой 5 выше обеих — ответ 3. Пара 1 и 3: крыша 3 ниже крыши 1, а первая крыша правее, которая выше 7, — это 4. Пара 4 и 5: выше 9 правее нет ничего, ответ -1. Пара 5 и 5: оба уже на одной крыше.

Пример 2
roofs=[1, 2, 3], pairs=[[2, 0], [0, 1]] → [2, 1]

Крыши растут слева направо, поэтому левый всегда может перейти прямо к правому: ответы 2 и 1.

Пример 3
roofs=[6, 6, 6], pairs=[[0, 1]] → [-1]
Ограничения
  • 1 ≤ len(roofs) ≤ 5 · 10⁴
  • 1 ≤ roofs[i] ≤ 10⁹
  • 1 ≤ len(pairs) ≤ 5 · 10⁴
  • pairs[q] = [a, b], 0 ≤ a, b ≤ len(roofs) - 1
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиЛучшая пара выше планок СложнаяВторое большее справа СложнаяКонтур городской застройки СложнаяМеньшие справа СложнаяСуммы отрезков в заданной полосе Сложная
загружаем Python…
Вход
roofs=[3, 7, 2, 5, 9, 4], pairs=[[0, 2], [1, 3], [4, 5], [5, 5]]
Ожидается
[3, 4, -1, 5]

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