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

Задача . D. Максимальная сумма k подотрезков


Рассмотрим последовательность целых чисел a1, a2, ..., an. Вам требуется выполнять запросы двух типов:

  • Формат запроса «0 i val». В ответ на запрос нужно выполнить присвоение: ai = val.
  • Формат запроса «1 l r k». В ответ на запрос нужно вывести максимальную сумму не более чем k непересекающихся подотрезков последовательности al, al + 1, ..., ar. Формально, вам нужно выбрать не более чем k пар целых чисел (x1, y1), (x2, y2), ..., (xt, yt) (l ≤ x1 ≤ y1 < x2 ≤ y2 < ... < xt ≤ yt ≤ rt ≤ k) таких, чтобы сумма ax1 + ax1 + 1 + ... + ay1 + ax2 + ax2 + 1 + ... + ay2 + ... + axt + axt + 1 + ... + ayt была как можно больше. Обратите внимание, что требуется выбрать не более чем k подотрезков. В частности, можно выбрать 0 подотрезков. В таком случае описанная сумма считается равной нулю.
Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105) — количество чисел в последовательности. В следующей строке записаны n целых чисел a1, a2, ..., an (|ai| ≤ 500).

В третьей строке записано целое число m (1 ≤ m ≤ 105) — количество запросов. В следующих m строках записаны запросы в формате, описанном в условии.

Для всех запросов на изменение элемента выполняются ограничения: 1 ≤ i ≤ n, |val| ≤ 500.

Для всех запросов на подсчет максимальной суммы не более чем k непересекающихся подотрезков выполняются ограничения: 1 ≤ l ≤ r ≤ n, 1 ≤ k ≤ 20. Гарантируется, что количество запросов на подсчет максимальной суммы не более чем k непересекающихся подотрезков не превышает 10000.

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

Для каждого запроса на подсчет максимальной суммы не более чем k непересекающихся подотрезков выведите ответ — максимальную сумму. Ответы на запросы выводите в порядке следования запросов во входных данных.

Примечание

В первом запросе первого примера можно выбрать единственную пару (1, 9). Таким образом, описанная сумма будет равна 17.

Взгляните на второй запрос первого примера. Как выбрать два подотрезка? (1, 3) и (7, 9)? Нет, конечно: сумма (1, 3) и (7, 9) равняется 20, в то время как при оптимальном выборе (1, 7) и (9, 9) сумма равняется 25.

Ответ на третий запрос равняется 0, мы предпочитаем ничего не выбирать, если на данном интервале все числа отрицательные.


Примеры
Входные данныеВыходные данные
1 9
9 -8 9 -1 -1 -1 9 -8 9
3
1 1 9 1
1 1 9 2
1 4 6 3
17
25
0
2 15
-4 8 -3 -10 10 4 -7 -7 0 -6 3 8 -10 7 2
15
1 3 9 2
1 6 12 1
0 6 5
0 10 -7
1 4 9 1
1 7 9 1
0 10 -3
1 4 10 2
1 3 13 2
1 4 11 2
0 15 -9
0 13 -9
0 11 -10
1 5 14 2
1 6 12 1
14
11
15
0
15
26
18
23
8

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

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