
我以为是我写的问题
后来发现 py都是 70 分 QAQQAQQAQQAQ
裤料
放份代码 证明真的是py选手
import sys
N = int(1e5 + 5)
M = N << 2
a = [0 for i in range(0, N)]
tr = [0 for i in range(0, M)]
lazy = [0 for i in range(0, M)]
def update(k):
	tr[k] = tr[k << 1] + tr[k << 1 | 1]
def build(k,l,r):
	if(l == r) :
		tr[k] = a[l]
		return
	mid = (l + r) >> 1
	build(k << 1, l, mid)
	build(k << 1|1, mid + 1, r)
	update(k)
	return 
def solve(k,l,r,val):
	lazy[k] += val
	tr[k] += (r - l + 1) * val
	 
def down(k, l, r):
	mid = (l + r) >> 1
	solve(k << 1, l, mid, lazy[k])
	solve(k << 1|1, mid + 1, r, lazy[k])
	lazy[k] = 0
	pass
def change(k, l, r, x, y, val):
	if(x <= l and r <= y):
		solve(k, l, r, val)
		return 
	if(lazy[k] != 0):
		down(k, l, r)
	mid = (l + r) >> 1
	if(x <= mid):
		change(k << 1, l, mid, x, y, val)
	if(y > mid):
		change(k << 1 | 1, mid + 1, r, x, y, val)
	update(k)
def ask(k, l, r, x, y):
	if(x <= l and r <= y):
		return tr[k]
	if(lazy[k] != 0) :
		down(k, l, r)
	mid = (l + r) >> 1
	ans = 0
	if(x <= mid):
		ans += ask(k << 1, l, mid, x, y)
	if(y > mid):
		ans += ask(k << 1|1, mid + 1, r, x, y)
	return ans
s = input().split()
n = int(s[0]) 
m = int(s[1])
A = input().split()
for i in range(0, n):
	a[i + 1] = int(A[i])
build(1, 1, n)
#print(tr[1:(n<<2)+1])
for i in range(0, m):
	temp = input().split()
	if(temp[0][0] == '1') :
		X = int(temp[1]); Y = int(temp[2]); K = int(temp[3]);
		change(1,1,n,X,Y,K)
	else :
		X = int(temp[1]); Y = int(temp[2]); 
	#	print(X, Y)
		print(ask(1,1,n,X,Y))