求助,re,不知道怎么改
查看原帖
求助,re,不知道怎么改
948336
2206GZ楼主2023/11/5 15:25
#include<bits/stdc++.h>
using namespace std;
struct f
{
	int l,r;
	long long dat,tag;
}x[40050];
long long n,m,a[10005],b,c,d,e;
void build(int cur,int l,int r)
{
	x[cur].l=l;
	x[cur].r=r;
	x[cur].tag=0;
	if(l==r)
	{
		x[cur].dat=a[l];
		return;
	}
	int mid=(l+r)/2;
	build(cur*2,l,mid);
	build(cur*2+1,mid+1,r);
	x[cur].dat=x[cur*2].dat+x[cur*2+1].dat;
}
void chuandi(int cur)
{
	if(x[cur].tag==0) return;
	int mid=(x[cur].l+x[cur].r)/2;
	x[2*cur].dat+=x[cur].tag*(mid-x[cur].l+1);
	x[2*cur].tag+=x[cur].tag;
	x[2*cur+1].dat+=x[cur].tag*(x[cur].r-mid);
	x[2*cur+1].tag+=x[cur].tag;
	x[cur].tag=0;
}
void add(int cur,int l,int r,int k)
{
	if(l<=x[cur].l&&x[cur].r<=r)
	{
		x[cur].dat+=k*(x[cur].r-x[cur].l+1);
		x[cur].tag+=k;
		return;
	}
	int mid=(x[cur].l+x[cur].r)/2;
	chuandi(cur);
	if(l<=mid)
	add(cur*2,l,r,k);
	if(r>mid)
	add(cur*2+1,l,r,k);
	x[cur].dat=x[cur*2].dat+x[cur*2+1].dat;
}
long long qh(int cur,int l,int r)
{
	cout<<cur<<endl;
	int mid=(x[cur].l+x[cur].r)/2;
	if(l<=x[cur].l&&x[cur].r<=r)
	return x[cur].dat;
	chuandi(cur);	
	long long sum=0;
	if(mid>=l)
	sum+=qh(cur*2,l,r);
	if(mid<r)
	sum+=qh(cur*2+1,l,r);
	return sum;
} 
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	cin>>a[i];
	for(int i=1;i<=m;i++)
	{
		cin>>b;
		if(b==1)
		{
			cin>>c>>d>>e;
			add(1,c,d,e);
		}
		if(b==2)
		{
			cin>>c>>d;
			cout<<qh(1,c,d)<<endl;
		}
	}
}
2023/11/5 15:25
加载中...