Ctrl K

Лучший XOR по цепочке начальников

Сложная
В компании n сотрудников с номерами от 0 до n - 1. У каждого, кроме директора, есть ровно один начальник: parent[i] — номер начальника сотрудника i, а у директора parent[i] = -1. Так получается дерево с директором в корне. Дан список запросов queries, где queries[i] = [node, val]. Для запроса рассмотрим цепочку от сотрудника node вверх до директора включительно (сам node и директор в неё входят). Нужно выбрать в цепочке сотрудника с номером p, у которого val XOR p максимален. Верните массив, где i-й элемент — этот максимум для i-го запроса.
Пример 1
parent=[-1, 0, 0, 1], queries=[[3, 6], [2, 1]] → [7, 3]

Цепочка от 3 до корня: 3, 1, 0. Лучше всего 6 XOR 1 = 7. Цепочка от 2: 2, 0, лучший результат 1 XOR 2 = 3.

Пример 2
parent=[2, -1, 1], queries=[[0, 4]] → [6]

Корень здесь 1. Цепочка от 0: 0, 2, 1. Значения 4 XOR 0 = 4, 4 XOR 2 = 6, 4 XOR 1 = 5, максимум 6.

Ограничения
  • 2 ≤ n = len(parent) ≤ 10⁵
  • Ровно у одного сотрудника parent[i] = -1, у остальных 0 ≤ parent[i] < n
  • Связи начальников образуют дерево (циклов нет)
  • 1 ≤ len(queries) ≤ 10⁵
  • 0 ≤ node < n
  • 0 ≤ val ≤ 2 · 10⁵
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиСлова для головоломок СложнаяНаибольший XOR близкой пары СложнаяСамая непохожая пара СредняяXOR близкой пары ЛёгкаяВсе способы расставить пробелы Сложная
загружаем Python…
Вход
parent=[-1, 0, 0, 1], queries=[[3, 6], [2, 1]]
Ожидается
[7, 3]

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