a166. NOI2005 Day1.2.维护数列
標籤 :
通過比率 : 24人/28人 ( 86% ) [非即時]
評分方式:
Tolerant

最近更新 : 2014-11-01 03:13

內容

请写一个程序,要求维护一个数列,支持以下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 操作,向输出文件依次打印结
果,每个答案(数字)占一行。
範例輸入 #1
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
-1
10
1
10
測資資訊:
記憶體限制: 512 MB
提示 :

初始时,我们拥有数列
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,表示取出数列中从第3个数开始的连续6个数:
2 -6 2 2 2 -5 -3 6 -5 7 2
如上所示的灰色部分2 2 2 -5 -3 6,翻转后得到6 -3 -5 2 2 2,并放回原来位置:
2 -6 6 -3 -5 2 2 2 -5 7 2
最后执行GET-SUM 5 4和MAX-SUM,不难得到答案1和10。
2 -6 6 -3 -5 2 2 2 -5 7 2
                  | MAX-SUM |

 

你可以认为在任何时刻,数列中至少有1个数。
输入数据一定是正确的,即指定位置的数在数列中一定存在。
50%的数据中,任何时刻数列中最多含有30 000个数;
100%的数据中,任何时刻数列中最多含有500 000个数。
100%的数据中,任何时刻数列中任何一个数字均在[-1 000, 1 000]内。
100%的数据中,M ≤20 000,插入的数字总数不超过4 000 000个,输入文件
大小不超过20MBytes。

//原题的空间限制为64MB,空间限制太紧,于是将其放宽到512MB。但仍然希望大家在64MB内AC。
//原题的时间限制不详,暂设为5s。

標籤:
出處:
NOI2005Day1第二题 [管理者: liouzhou_101 (王启圣) ]

本題狀況 本題討論 排行

編號 身分 題目 主題 人氣 發表日期
沒有發現任何「解題報告」