不知道哪里打错了,求助
#include<bits/stdc++.h>
using namespace std;
struct lbf
{
int l,r;
long long s,d;
}a[400005];
int n,x,y,q,t,b[100005];
char c;
void ss1(int w,int u,int v)
{
if(u==v)
{
a[w].l=u;
a[w].r=v;
a[w].s=b[u];
}
else
{
a[w].l=u;
a[w].r=v;
ss1(w*2,u,(u+v)/2);
ss1(w*2+1,(u+v)/2+1,v);
a[w].s=a[w*2].s+a[w*2+1].s;
}
}
void ss2(int w,int z,int u,int v)
{
if(a[w].l>=u && a[w].r<=v)
{
a[w].s+=(long long)z*(a[w].r-a[w].l+1);
a[w].d+=z;
return;
}
if(a[w].d)
{
a[w*2].s+=(long long)a[w].d*(a[w*2].r-a[w*2].l+1);
a[w*2+1].s+=(long long)a[w].d*(a[w*2+1].r-a[w*2+1].l+1);
a[w*2].d+=a[w].d;
a[w*2+1].d+=a[w].d;
a[w].d=0;
}
int m=(a[w].l+a[w].r)/2;
if(u<=m)
{
ss2(w*2,z,u,v);
}
if(v>m)
{
ss2(w*2+1,z,u,v);
}
a[w].s+=a[w*2].s+a[w*2+1].s;
}
long long ss3(int w,int u,int v)
{
if(a[w].l>=u && a[w].r<=v)
{
return a[w].s;
}
if(a[w].d)
{
a[w*2].s+=(long long)a[w].d*(a[w*2].r-a[w*2].l+1);
a[w*2+1].s+=(long long)a[w].d*(a[w*2+1].r-a[w*2+1].l+1);
a[w*2].d+=a[w].d;
a[w*2+1].d+=a[w].d;
a[w].d=0;
}
int m=(a[w].l+a[w].r)/2;
long long ans=0;
if(u<=m)
{
ans+=ss3(w*2,u,v);
}
if(v>m)
{
ans+=ss3(w*2+1,u,v);
}
return ans;
}
int main(){
cin>>n>>q;
for(int i=1;i<=n;i++)
{
cin>>b[i];
}
ss1(1,1,n);
for(int i=1;i<=q;i++)
{
cin>>c>>x>>y;
if(c=='1')
{
cin>>t;
ss2(1,t,x,y);
}
else
{
cout<<ss3(1,x,y)<<endl;
}
}
return 0;
}