我以为是我写的问题
后来发现 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))