求助
查看原帖
求助
209916
youkasgs_wyb楼主2024/9/10 20:18

不知道哪里打错了,求助

#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;
}
2024/9/10 20:18
加载中...