1345: [蓝桥杯2017决赛]数组操作

内存限制:256 MB 时间限制:2 S 标准输入输出
题目类型:传统 评测方式:文本比较 上传者:
提交:64 通过:2

题目描述

给出一个长度为 n 的数组 {A},由 1 到 n 标号 , 你需要维护 m 个操作。
操作分为三种,输入格式为:
1 L R d,将数组中下标 L 到 R 的位置都加上 d,即对于 L<=i<=R,执行A[i]=A[i]+d。
2 L1 R1 L2 R2,将数组中下标为 L1 到 R1 的位置,赋值成 L2 到 R2 的值,保证 R1-L1=R2-L2。 
换句话说先对 0<=i<=R2-L2 执行 B[i]=A[L2+i],再对 0<=i<=R1-L1 执行 A[L1+i]=B[i],其中 {B} 为一个临时数组。
3 L R,求数组中下标 L 到 R 的位置的和,即求出 ∑Ai(i=L到R)。

输入格式

第一行一个整数 Case,表示测试点编号,其中 Case=0 表示该点为样例。
第二行包含两个整数 n,m。保证 1<=n,m<=10^5。
第三行包含 n 个整数 A_i,表示这个数组的初值。保证 0<=A_i<=10^5。
接下来 m 每行描述一个操作,格式如问题描述所示。
对于操作中提到每个数,满足 0<=d<=10^5,1<=L<=R<=n,1<=L1<=R1<=n,1<=L2<=R2<=n,R1-L1=R2-L2。

输出格式

对于每次 3 操作输出一行一个数,表示求和的结果。

输入样例 复制

0
5 6
1 2 3 4 5
2 1 3 3 5
3 3 5
1 2 4 2
3 3 5
2 1 3 3 5
3 1 5

输出样例 复制

14
18
29