Ctrl K

Кратчайший отрезок с полным OR

Средняя
Дан массив неотрицательных целых чисел values длины n. Для каждой позиции i рассмотрим отрезки, которые начинаются в i и идут вправо: values[i..j]. Побитовое OR такого отрезка не убывает с ростом j и достигает максимума, когда отрезок дотягивается до конца массива. Однако тот же максимум часто набирается раньше. Верните массив длины n, где на месте i стоит длина самого короткого непустого отрезка, начинающегося в i, побитовое OR которого равно наибольшему возможному OR отрезков с началом в i.
Пример 1
values=[4, 1, 0, 2, 6] → [4, 4, 3, 2, 1]

От позиции 0 до конца OR равен 7, и все три бита набираются только к элементу 2 — длина 4. От позиции 1 бит 4 появляется лишь в последнем элементе — тоже 4. Дальше: [0, 2, 6] — 3, [2, 6] — 2, [6] — 1.

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

Максимальный OR от любой позиции равен 0, его даёт уже один элемент.

Пример 3
values=[5, 3] → [2, 1]
Ограничения
  • 1 ≤ n ≤ 10⁵
  • 0 ≤ values[i] ≤ 10⁹
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиСамый короткий рывок СредняяНайти лишнюю копию Средняяk ближайших значений СредняяОтрезки с маленьким произведением СредняяСамый длинный общий кусок Средняя
загружаем Python…
Вход
values=[4, 1, 0, 2, 6]
Ожидается
[4, 4, 3, 2, 1]

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