955. 维护数列(splay,综合模板)

活动 - AcWing

请写一个程序,要求维护一个数列,支持以下 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值