请写一个程序,要求维护一个数列,支持以下 6 种操作:(请注意,格式栏 中的下划线 _
表示实际输入文件中的空格)
操作编码 | 基本操作中的格式 | 说明 |
---|---|---|
1. 插入 | INSERT posi tot c1 c2 ... ctot | 在当前数组的位置 posi 插入总共 tot 个数字:c1, c2, ..., ctot; 若在数组末尾插入,则 posi 为 0 |
2. 删除 | DELETE posi tot | 从当前数组的位置 posi 删除共计 tot 个数字 |
3. 修改 | MAKE-SAME posi tot c | 将当前数组的位置 posi 开始的 tot 个数字均修改为 c |
4. 翻转 | REVERSE posi tot | 反转从当前数组的位置 posi 开始的 tot 个数字,重新排序后原先的位置变为末尾,末尾变为位置 |
5. 求和 | GET-SUM posi tot | 计算从当前数组的位置 posi 开始的 tot 个数字的和 |
6. 求和最大的子序列 | MAX-SUM | 求出当前数组中和最大的一段子序列,并输出最大和 |
注意:对于操作6,要求子序列是非空的。
输入格式
第 1 行包含两个数 N 和 M,N 表示初始时数列中数的个数,M 表示要进行的操作数目。
第 2 行包含 N 个数字,描述初始时的数列。
以下 M 行,每行一条命令,格式参见问题描述中的表格。
输出格式
对于输入数据中的 GET-SUM
和 MAX-SUM
操作,向输出文件依次打印结果,每个答案(数字)占一行。
数据范围与约定
你可以认为在任何时刻,数列中至少有 1 个数。
输入数据一定是正确的,即指定位置的数在数列中一定存在。
50% 的数据中,任何时刻数列中最多含有 30000 个数;100% 的数据中,任何时刻数列中最多含有 500000 个数。
100% 的数据中,任何时刻数列中任何一个数字均在 [−1000,1000] 内。
100% 的数据中,M≤20000,插入的数字总数不超过 4000000 个,输入文件大小不超过 20 MBytes。
输入样例:
9 8
2 -6 3 5 1 -5 -3 6 3
GET-SUM 5 4
MAX-SUM
INSERT 8 3 -5 7 2
DELETE 12 1
MAKE-SAME 3 3 2
REVERSE 3 6
GET-SUM 5 4
MAX-SUM