#include<bits/stdc++.h>
using namespace std;
int n,m,c[100001],cf[100001],ans;
inline int read(){
int w=0,s=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')
s=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
w=w*10+ch-'0';
ch=getchar();
}
return s*w;
}
struct SegmentTree{
int l,r,sum;
}t[400001];
void build(int p,int l,int r){
t[p].l=l;
t[p].r=r;
if(l==r){
t[p].sum=c[l];
return;
}
int mid=(l+r)>>1;
build(p*2,l,mid);
build(p*2+1,mid+1,r);
t[p].sum=t[p*2].sum+t[p*2+1].sum;
}
int ask(int p,int x,int y){
if(x<=t[p].l&&t[p].r<=y){
return t[p].sum;
}
int mid=(t[p].l+t[p].r)>>1;
if(x<=mid){
return ans+=ask(p*2,x,mid);
}
if(x>mid){
return ans+=ask(p*2+1,mid+1,y);
}
return ans;
}
int main(){
n=read();
m=read();
for(register int i=1;i<=n;++i){
c[i]=read();
}
build(1,1,n);
// for(register int i=1;i<=n;++i){
// cout<<t[i].sum<<' '<<t[i].l<<' '<<t[i].r<<endl;
// }
for(register int i=1;i<=m;++i){
int a;
a=read();
if(a==1){
int x,y,k;
x=read();
y=read();
k=read();
cf[x]+=k;
cf[y+1]-=k;
for(register int j=1;j<=n;++j){
cf[j]+=cf[j-1];
}
for(register int j=1;j<=n;++j){
c[j]+=cf[j];
}
}
if(a==2){
int x,y;
x=read();
y=read();
cout<<ask(1,x,y)<<endl;
}
memset(cf,0,sizeof(cf));
ans=0;
}
return 0;
}
样例都过不了,求调,谢谢了