题目名称 339. [NOI 2005]维护数列
输入输出 seq2005.in/out
难度等级 ★★★★
时间限制 3000 ms (3 s)
内存限制 64 MiB
测试数据 10
题目来源 GravatarBYVoid 于2009-05-30加入
开放分组 全部用户
提交状态
分类标签
NOI 平衡树 Splay
分享题解
通过:203, 提交:1060, 通过率:19.15%
Gravatarzhengtn03 100 0.814 s 23.26 MiB C++
Gravatarzhengtn03 100 0.927 s 38.49 MiB C++
GravatarHzyuer 100 0.984 s 20.89 MiB C++
GravatarCandy? 100 1.335 s 25.11 MiB C++
Gravatarwumingshi 100 1.380 s 26.99 MiB C++
GravatarHzyuer 100 1.515 s 25.11 MiB C++
Gravatarxzy 100 1.535 s 23.21 MiB C++
Gravatar泪寒之雪 100 1.588 s 4.61 MiB C++
Gravatar泪寒之雪 100 1.623 s 4.61 MiB C++
GravatarKZNS 100 1.674 s 20.32 MiB C++
关于 维护数列 的近10条评论(全部评论)
回复 @WHZ0325 :
感谢
Gravatarhuaruoji
2021-05-07 12:03 33楼
注意COGS上不要定义名称为maintain的函数,改为Maintain就AC了……
GravatarWHZ0325
2018-03-28 23:20 32楼
3天...
GravatarCSU_Turkey
2017-12-21 19:11 31楼
回复 @Hallmeow :
然后你发现数组在COGS之外的几乎所有OJ上都会被卡空间(64MB)
UPD: 空间限制改了一下(现在与BZOJ等OJ一致了), 顺便叉掉了一部分MLE代码
Gravatarrvalue
2017-10-15 19:57 30楼
GravatarCooook
2017-10-03 10:35 29楼
还是无旋Treap爽
GravatarHzoi_Ivan
2017-10-01 13:10 28楼
回复 @҉҉ Hzoi_Goodboy : %%%qsy dalao
GravatarHzoi_Ivan
2017-09-30 17:46 27楼
回复 @(无定义) :
所以我就改成了指针= =
GravatarHzoi_Mafia
2017-08-05 09:06 26楼
GravatarAnonymity
2017-08-04 19:37 25楼
Gravatarxzz_233
2017-08-04 17:35 24楼

339. [NOI 2005]维护数列

★★★★   输入文件:seq2005.in   输出文件:seq2005.out   简单对比
时间限制:3 s   内存限制:64 MiB

【问题描述】

请写一个程序,要求维护一个数列,支持以下 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,表示取出数