Олимпиадный тренинг

Задача . D. Сумма путей


Рассмотрим \(n\) клеток, пронумерованных числами \(1,2,\dots, n\) слева направо. Вы можете изначально в любую из этих клеток поставить робота, который затем должен сделать ровно \(k\) шагов.

За один шаг робот перемещается в соседнюю клетку слева или справа, при этом он не может выходить за границы заданных клеток. Иными словами, если робот был в клетке \(i\), он должен переместиться либо в клетку \(i-1\), либо в клетку \(i+1\), при этом клетка, в которую он перемещается, должна иметь номер от \(1\) до \(n\) (включительно). Клетки в том порядке, в котором робот их посещает (включая стартовую клетку), вместе составляют хороший путь.

В каждой клетке записано целое число — в клетке \(i\) записано число \(a_i\). Пусть \(c_0, c_1, \dots, c_k\) — последовательность клеток в хорошем пути в том порядке, в котором они были посещены (\(c_0\) — клетка, где был робот изначально, \(c_1\) — клетка, в которой он оказался после первого шага, и так далее; более формально, \(c_i\) — клетка, в которой оказался робот после \(i\) шагов). Тогда стоимость пути вычисляется по следующей формуле: \(a_{c_0} + a_{c_1} + \dots + a_{c_k}\).

Ваша задача — посчитать суммарную стоимость всех хороших путей. Так как это число может быть очень большим, его надо выводить по модулю \(10^9 + 7\). Два хороших пути различны, если либо различается стартовая клетка, либо существует такое \(i \in [1, k]\), что местоположение робота после \(i\) шагов различается в этих путях.

Также вам нужно обрабатывать \(q\) обновлений значений \(a\) и после каждого обновления вычислять требуемую суммарную стоимость. Каждое обновление меняет число, записанное ровно в одной клетке.

Входные данные

В первой строке заданы три целых числа \(n\), \(k\) и \(q\) (\(2 \le n \le 5000\); \(1 \le k \le 5000\); \(1 \le q \le 2 \cdot 10^5\)).

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)).

Затем следуют \(q\) строк. Каждая строка содержит два числа \(i\) и \(x\) (\(1 \le i \le n\); \(1 \le x \le 10^9\)), обозначающих, что значение \(a_i\) становится равным \(x\).

Выходные данные

Выведите \(q\) целых чисел, \(i\)-е из которых должно быть равно суммарной стоимости хороших путей после первых \(i\) обновлений. Так как эти числа могут быть большими, выводите их по модулю \(10^9 + 7\).

Примечание

Все хорошие пути в первом примере: \((1, 2), (2, 1), (2, 3), (3, 2), (3, 4), (4, 3), (4, 5), (5, 4)\).

Изначально значения \(a\) равны \([3, 5, 1, 4, 2]\). После первого обновления — \([9, 5, 1, 4, 2]\). После второго обновления — \([9, 4, 1, 4, 2]\), и так далее.


Примеры
Входные данныеВыходные данные
1 5 1 5
3 5 1 4 2
1 9
2 4
3 6
4 6
5 2
62
58
78
86
86
2 5 2 5
3 5 1 4 2
1 9
2 4
3 6
4 6
5 2
157
147
207
227
227
3 4 40 6
92 21 82 46
3 56
1 72
4 28
1 97
2 49
2 88
239185261
666314041
50729936
516818968
766409450
756910476

time 3000 ms
memory 1024 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Комментарий учителя