def lowbit(x):
return x&-x
def add(x,d):
while x<=N:
tree[x]+=d
x+=lowbit(x) #需要修改那个节点的值
def sum(x):
ans=0
while x>0:
ans+=tree[x]
x-=lowbit(x) #需要加上那个节点的值
return ans
n=int(input())
N=100050
tree=[0]*N
a=[0]+list(map(int,input().split()))
m=int(input())
for i in range(1,n+1):
add(i,a[i]) #初始化树状数组
for i in range(m):
x,A,B=map(int,input().split())
if x==1:
add(A,B)
else:
print(sum(B)-sum(A-1))
#树状数组的修改和查询区间和的时间复杂度均为logn
def lowbit(x):
return x&-x
def add1(x,d):
while x<=N:
tree1[x]+=d
x+=lowbit(x)
def add2(x,d):
while x<=N:
tree2[x]+=d
x+=lowbit(x)
def sum1(x):
ans=0
while x>0:
ans+=tree1[x]
x-=lowbit(x)
return ans
def sum2(x):
ans=0
while x>0:
ans+=tree2[x]
x-=lowbit(x)
return ans
N=100050
#两个树状数组
tree1=[0]*N #求修改区间,处理Di
tree2=[0]*N #求区间和,处理(i-1)Di
n,q=map(int,input().split())
old=0
a=[0]+list(map(int,input().split()))
for i in range(1,n+1):
# 差分数组原理,初始化
add1(i,a[i]-old)
add2(i,(i-1)*(a[i]-old))
old=a[i]
for i in range(q):
s=list(map(int,input().split()))
L,R=s[1],s[2]
if s[0]==1:#区间修改
d=s[3]
add1(L,d)
add1(R+1,-d)
add2(L,d*(L-1))
add2(R+1,-d*R)
else:#树状数组区间求和公式
print(R*sum1(R)-sum2(R)-(L-1)*sum1(L-1)+sum2(L-1))