题目名称 | 339. [NOI 2005]维护数列 |
---|---|
输入输出 | seq2005.in/out |
难度等级 | ★★★★ |
时间限制 | 3000 ms (3 s) |
内存限制 | 64 MiB |
测试数据 | 10 |
题目来源 | BYVoid 于2009-05-30加入 |
开放分组 | 全部用户 |
提交状态 | |
分类标签 | |
分享题解 |
通过:203, 提交:1060, 通过率:19.15% | ||||
zhengtn03 | 100 | 0.814 s | 23.26 MiB | C++ |
zhengtn03 | 100 | 0.927 s | 38.49 MiB | C++ |
Hzyuer | 100 | 0.984 s | 20.89 MiB | C++ |
Candy? | 100 | 1.335 s | 25.11 MiB | C++ |
wumingshi | 100 | 1.380 s | 26.99 MiB | C++ |
Hzyuer | 100 | 1.515 s | 25.11 MiB | C++ |
xzy | 100 | 1.535 s | 23.21 MiB | C++ |
泪寒之雪 | 100 | 1.588 s | 4.61 MiB | C++ |
泪寒之雪 | 100 | 1.623 s | 4.61 MiB | C++ |
KZNS | 100 | 1.674 s | 20.32 MiB | C++ |
关于 维护数列 的近10条评论(全部评论) | ||||
---|---|---|---|---|
回复 @WHZ0325 :
感谢 | ||||
注意COGS上不要定义名称为maintain的函数,改为Maintain就AC了……
WHZ0325
2018-03-28 23:20
32楼
| ||||
3天...
CSU_Turkey
2017-12-21 19:11
31楼
| ||||
| ||||
还是无旋Treap爽
| ||||
回复 @҉҉ Hzoi_Goodboy : %%%qsy dalao
Hzoi_Ivan
2017-09-30 17:46
27楼
| ||||
回复 @(无定义) :
所以我就改成了指针= =
Hzoi_Mafia
2017-08-05 09:06
26楼
| ||||
| ||||
xzz_233
2017-08-04 17:35
24楼
|
【问题描述】
请写一个程序,要求维护一个数列,支持以下 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 |
求出当前数列中和最大的一段子列, 并输出最大和 |
【输入格式】
输入文件的第 1 行包含两个数 N 和 M,N 表示初始时数列中数的个数,M表示要进行的操作数目。
第 2 行包含 N 个数字,描述初始时的数列。
以下 M 行,每行一条命令,格式参见问题描述中的表格。
【输出格式】
对于输入数据中的 GET-SUM 和 MAX-SUM 操作,向输出文件依次打印结果,每个答案(数字)占一行。
【输入样例】
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
【输出样例】
-1 10 1 10
【样例说明】
初始时,我们拥有数列 2 -6 3 5 1 -5 -3 6 3
执行操作 GET-SUM 5 4,表示求出数列中从第 5 个数开始连续 4 个数字之和,1+(-5)+(-3)+6 = -1:
2 -6 3 5 1 -5 -3 6 3
执行操作 MAX-SUM,表示要求求出当前数列中最大的一段和,应为 3+5+1+(-5)+(-3)+6+3 = 10:
2 -6 3 5 1 -5 -3 6 3
执行操作 INSERT 8 3 -5 7 2,即在数列中第 8 个数字后插入-5 7 2,
2 -6 3 5 1 -5 -3 6 -5 7 2 3
执行操作 DELETE 12 1,表示删除第 12 个数字,即最后一个:
2 -6 3 5 1 -5 -3 6 -5 7 2
执行操作 MAKE-SAME 3 3 2,表示从第 3 个数开始的 3 个数字,统一修改为 2:
2 -6 3 5 1 -5 -3 6 -5 7 2
改为
2 -6 2 2 2 -5 -3 6 -5 7 2
执行操作 REVERSE 3 6,表示取出数