Ctrl K

Делим на четыре парами

Сложная
Дан список запросов ranges, каждый имеет вид [l, r] и задаёт набор чисел l, l + 1, ..., r. За одну операцию из набора выбирают два числа a и b и заменяют их на a // 4 и b // 4 (деление с округлением вниз). Для каждого запроса найдите наименьшее число операций, после которых все числа набора станут нулями. Запросы независимы. Верните сумму ответов по всем запросам.
Пример 1
ranges=[[1, 3]] → 2

Набор [1, 2, 3]: каждое число обнуляется за одно деление. Сначала берём 1 и 2, затем 3 вместе с уже нулевым числом — 2 операции.

Пример 2
ranges=[[4, 5], [1, 2]] → 3

Для [4, 5] нужно 2 операции: 4 и 5 делятся вместе дважды. Для [1, 2] — одна. Итого 3.

Пример 3
ranges=[[2, 5]] → 3

Числам 2 и 3 нужно по одному делению, а 4 и 5 — по два. Всего 6 делений, по два за операцию — 3 операции.

Ограничения
  • 1 ≤ len(ranges) ≤ 10⁵
  • ranges[i] = [l, r]
  • 1 ≤ l < r ≤ 10⁹
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиШахматка перестановками строк и столбцов СложнаяДве группы с одинаковым средним СложнаяДуэль на стирание с XOR СложнаяЦепочки с квадратными суммами СложнаяXOR от всех попарных AND Сложная
загружаем Python…
Вход
ranges=[[1, 3]]
Ожидается
2

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