N=100001
[n,m]=list(map(int,input().split()))
num=list(map(int,input().split()))
class SegTree():
def __init__(self):
self.lc=0
self.rc=0
self.sum=0
self.tag=0
tr=[SegTree() for i in range(N*4)]
def build(p,l,r):
if(l==r):
tr[p].sum=num[l-1]
return
mid=(l+r)>>1
build(p<<1,l,mid)
build(p<<1|1,mid+1,r)
tr[p].sum=tr[p<<1].sum+tr[p<<1|1].sum
return
def down(p,s):
tr[p<<1].sum+=tr[p].tag*(s-(s>>1))
tr[p<<1].tag+=tr[p].tag
tr[p<<1|1].sum+=tr[p].tag*(s>>1)
tr[p<<1|1].tag+=tr[p].tag
tr[p].tag=0
return
def modify(x,y,z,p,l,r):
if(x<=l)&(r<=y):
tr[p].sum+=z*(r-l+1)
tr[p].tag+=z
return
if(tr[p].tag!=0):
down(p,r-l+1)
mid=(l+r)>>1
if(x<=mid):
modify(x,y,z,p<<1,l,mid)
if(y>mid):
modify(x,y,z,p<<1|1,mid+1,r)
tr[p].sum=tr[p<<1].sum+tr[p<<1|1].sum
return
def query(x,y,p,l,r):
if(x<=l)&(r<=y):
return tr[p].sum
if(tr[p].tag!=0):
down(p,r-l+1)
mid=(l+r)>>1
res=0
if(x<=mid):
res+=query(x,y,p<<1,l,mid)
if(y>mid):
res+=query(x,y,p<<1|1,mid+1,r)
return res
build(1,1,n)
while(m>0):
m-=1
op=list(map(int,input().split()))
if(op[0]==1):
modify(op[1],op[2],op[3],1,1,n)
else:
print(query(op[1],op[2],1,1,n))
(不要在意我为什么会用Python到洛谷来做题[doge])