#P1024. 数列

    ID: 36 传统题 1000ms 256MiB 尝试: 0 已通过: 0难度: 提高 ← 上一题 下一题 → 随机一题 上传者: 标签 数据结构 线段树 贪心 动态规划 动态规划 DP 其他 分治 反悔贪心 区间合并 延迟标记
显示设置

数列

题目描述

这天,小P拿到了一个数列。

小P想要维护这个长度为 nn 的整数序列 a1,a2,…,ana_1, a_2, \ldots, a_n,并支持以下两种操作:

  • 0 i val:把 aia_i 修改为 valval;
  • 1 l r k:在 al,al+1,…,ara_l, a_{l+1}, \ldots, a_r 中选出至多 kk 个互不相交的子段,使得这些子段中所有元素之和最大,输出这个最大值。

形式化地,你需要选择若干整数对 (x1,y1),(x2,y2),…,(xt,yt)(x_1, y_1), (x_2, y_2), \ldots, (x_t, y_t),满足

$$l \le x_1 \le y_1 < x_2 \le y_2 < \cdots < x_t \le y_t \le r, \qquad t \le k$$

并最大化

$$a_{x_1} + a_{x_1+1} + \cdots + a_{y_1} + a_{x_2} + a_{x_2+1} + \cdots + a_{y_2} + \cdots + a_{x_t} + a_{x_t+1} + \cdots + a_{y_t}$$

注意 tt 可以取 00,此时所选元素之和记为 00。也就是说,答案不会小于 00。

输入格式

输入的第一行包含一个整数 nn,表示序列的长度。

第二行包含 nn 个整数,依次表示 a1,a2,…,ana_1, a_2, \ldots, a_n。

第三行包含一个整数 mm,表示操作的个数。

接下来 mm 行,每行描述一次操作,格式为下列两种之一:

  • 0 i val,表示把 aia_i 修改为 valval;
  • 1 l r k,表示一次询问。

输出格式

对于每一次 1 l r k 询问,输出一行一个整数,表示对应询问的答案。

请按照询问在输入中出现的顺序依次输出。

输入输出样例 #1

输入 #1

9
9 -8 9 -1 -1 -1 9 -8 9
3
1 1 9 1
1 1 9 2
1 4 6 3

输出 #1

17
25
0

输入输出样例 #2

输入 #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

输出 #2

14
11
15
0
15
26
18
23
8

说明

样例解释

样例一

  • 第一次询问选择子段 (1,9)(1, 9),元素之和为 1717。
  • 第二次询问选择子段 (1,7)(1, 7) 与 (9,9)(9, 9),元素之和为 2525。

注意选择 (1,3)(1, 3) 与 (7,9)(7, 9) 只能得到 2020,并不是最优解。

  • 第三次询问的区间内所有元素都是负数,因此选择 00 个子段,答案为 00。

数据范围

  • 对于 100%100\% 的数据,1≤n≤1051 \le n \le 10^5,1≤m≤1051 \le m \le 10^5,1≤i≤n1 \le i \le n,1≤l≤r≤n1 \le l \le r \le n,∣ai∣≤500|a_i| \le 500,∣val∣≤500|val| \le 500。数据保证所有询问的 kk 之和不超过 2×1052 \times 10^5。