#include<bits/stdc++.h>
#define N 100086
using namespace std;
struct name {
int num,left,right;
} tree[N];
int in[N],ans;
int add(int x) {
if(tree[x].left==tree[x].right) {
tree[x].num=in[tree[x].right];
return tree[x].num;
}
tree[x].num=add(x*2)+add(x*2+1);
return tree[x].num;
}
void build(int x,int left,int right) {
tree[x].left=left,tree[x].right=right;
if(left==right)return ;
int mid=(left+right)>>1;
build(x*2,left,mid);
build(x*2+1,mid+1,right);
}
void qjcx(int x,int left,int right) {
if(tree[x].left>=left&&tree[x].right<=right) {
ans+=tree[x].num;
return ;
}
if(tree[x*2].right>=left)
qjcx(x*2,left,right);
if(tree[x*2+1].left<=right)
qjcx(x*2+1,left,right);
}
void qjxg(int x,int l,int r,int k) {
if(tree[x].left>=l&&tree[x].right<=r) {
tree[x].num+=k;
return ;
}
if(tree[x*2].right>=l)
qjxg(x*2,l,r,k);
if(tree[x*2+1].left<=r)
qjxg(x*2+1,l,r,k);
}
int n,m,a,x,y,k;
int main() {
cin>>n>>m;
for(int i=1; i<=n; i++) {
cin>>in[i];
}
build(1,1,n);
add(1);
for(int i=1; i<=m; i++) {
cin>>a>>x>>y;
if(a==1) {
cin>>k;
qjxg(1,x,y,k);
} else {
ans=0;
qjcx(1,x,y);
cout<<ans<<'\n';
}
}
return 0;
}
样例第三个20输出12,全wa