题目描述
给定一个长度为 N 的数组 a,其初值分别为 a1,a2,...,aN。
现有 Q 个操作,操作有以下两种:
1 l r k
,将区间 al,al+1,...ar 的值加上 k。2 l r
,求区间 al,al+1,...,ar 的和为多少。
输入描述
输入第 1 行包含两个正整数 N,Q,分别表示数组 a 的长度和操作的个数。
第 2 行包含 N 个非负整数 a1,a2,...,aN,表示数组 a 元素的初值。
第 3∼Q−2 行每行表示一共操作,格式为以下两种之一:
1 l r x
2 l r
其含义如题所述。
1 ≤ N, Q ≤ 10^5 , 1≤ l ≤ r ≤ N, -10^9 ≤ K, ai ≤ 10^9
输出描述
输出共 Q 行,每行包含一个整数,表示相应查询的答案。
输入输出样例
示例 1
输入
5 5
1 2 3 4 5
2 1 2
1 2 3 1
2 1 3
1 1 5 1
2 1 5
输出
3
8
22
参考代码:(能通过30%测试)
n,m=map(int,input().split())
a=[0]+list(map(int,input().split()))
for i in range(m):
w=list(map(int,input().split()))
if len(w)==3: #区间求和
q,L,R=w
print(sum(a[L:R+1]))
else: #区间修改
q,L,R,d=w
for i in range(L,R+1):
a[i]+=d