Ctrl K

Выбор через один после правок

Сложная
Дан массив целых чисел values и список правок edits, где edits[i] = [pos, x]. Правки применяются по очереди: правка ставит values[pos] = x. После каждой правки посчитайте наибольшую сумму, которую можно набрать, выбирая элементы массива так, чтобы никакие два выбранных не стояли рядом. Можно не выбрать ни одного элемента — тогда сумма 0. Верните сумму этих ответов по всем правкам по модулю 10⁹ + 7. Пересчитывать всё заново после каждой правки слишком долго — нужно обновлять ответ быстрее, чем за O(n).
Пример 1
values=[4, 2, 6, 3], edits=[[2, -1], [3, 8]] → 19

После первой правки массив [4, 2, -1, 3], лучше всего взять 4 и 3: 7. После второй — [4, 2, -1, 8], лучшее 4 + 8 = 12. Ответ 7 + 12 = 19.

Пример 2
values=[-2, -7], edits=[[1, -3]] → 0

Все числа отрицательные, выгоднее ничего не брать: сумма 0.

Пример 3
values=[5, 5, 5], edits=[[1, 20], [1, 1]] → 30
Ограничения
  • 1 ≤ len(values) ≤ 5·10⁴
  • -10⁵ ≤ values[i] ≤ 10⁵
  • 1 ≤ len(edits) ≤ 5·10⁴
  • 0 ≤ pos < len(values)
  • -10⁵ ≤ x ≤ 10⁵
Встречал эту задачу на настоящем собесе?
Решили0
Пробовали0
Отправок0
Принято—
Темы
Похожие задачиРастущая цепочка мелкими шагами СложнаяКонтур городской застройки СложнаяМеньшие справа СложнаяСуммы отрезков в заданной полосе СложнаяПары с крутым спадом Сложная
загружаем Python…
Вход
values=[4, 2, 6, 3], edits=[[2, -1], [3, 8]]
Ожидается
19

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