Ctrl K

XOR на отрезках

Средняя
Датчик пишет в журнал положительные числа values. Чтобы проверять целостность кусков журнала, нужно быстро считать контрольную сумму любого отрезка — побитовый XOR его элементов. Дан список запросов ranges, где ranges[i] = [l, r]. Для каждого запроса посчитайте values[l] XOR values[l + 1] XOR ... XOR values[r] (границы включительно). Верните список ответов в порядке запросов.
Пример 1
values=[6, 3, 5, 9], ranges=[[0, 1], [1, 3], [2, 2], [0, 3]] → [5, 15, 5, 9]

6 XOR 3 = 5; 3 XOR 5 XOR 9 = 15; отрезок из одного элемента — это сам элемент, 5; весь массив: 6 XOR 3 XOR 5 XOR 9 = 9.

Пример 2
values=[7, 7, 7], ranges=[[0, 1], [0, 2]] → [0, 7]

Два одинаковых числа взаимно гасятся, поэтому первый ответ 0, а второй 7.

Ограничения
  • 1 ≤ len(values), len(ranges) ≤ 3·10⁴
  • 1 ≤ values[i] ≤ 10⁹
  • ranges[i] = [l, r], 0 ≤ l ≤ r < len(values)
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиПалиндром после пары правок СредняяРазрез на равные по XOR половины СредняяK-й по величине XOR угла СредняяДополнение XOR при укорачивании СредняяПроизведения двоичных кусков Средняя
загружаем Python…
Вход
values=[6, 3, 5, 9], ranges=[[0, 1], [1, 3], [2, 2], [0, 3]]
Ожидается
[5, 15, 5, 9]

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