线段树10pts
查看原帖
线段树10pts
345930
Gold14526神金楼主2022/4/8 20:22
#include<bits/stdc++.h>
using namespace std;
struct tree{
	int l,r;
	long long pre,add;
}a[10000001];
int c[100001];
void maketree(int p,int l,int r)
{
	a[p].l=l,a[p].r=r;
	if(l==r)
	{
		a[p].pre=c[l];
		return;
	}
	int mid=l+r>>1;
	maketree(p<<1,l,mid);
	maketree(p<<1|1,mid+1,r);
	a[p].pre=a[p<<1].pre+a[p<<1|1].pre;
	a[p].add=0;
}
void pushdown(int p)
{
	a[p].pre+=a[p].add*(a[p].r-a[p].l+1);
	a[p<<1].add+=a[p].add;
	a[p<<1|1].add+=a[p].add;
	a[p].add=0;
}
long long change(int p,int l,int r)
{
	if(a[p].l>=l&&a[p].r<=r)
	{
		pushdown(p);
		return a[p].pre;
	}
	if(a[p].r<l||a[p].l>r)return 0;
	int mid=a[p].l+a[p].r>>1;
	pushdown(p);
	int s=change(p<<1,l,mid)+change(p<<1|1,mid+1,r);
	a[p].pre=(a[p<<1].pre+a[p<<1].add*(a[p<<1].r-a[p<<1].l+1))+(a[p<<1|1].pre+a[p<<1|1].add*(a[p<<1|1].r-a[p<<1|1].l+1));
	return s;
}
void treeplus(int p,int l,int r,int k)
{
	if(a[p].l==l&&a[p].r==r)
	{
		a[p].add+=k;
		return;
	}
	if(a[p].r<l||a[p].l>r)return;
	int mid=a[p].l+a[p].r>>1;
	pushdown(p);
	if(mid>=l)
	treeplus(p<<1,l,min(mid,r),k);
	if(mid<r)
	treeplus(p<<1|1,max(l,mid+1),r,k);
	a[p].pre=(a[p<<1].pre+a[p<<1].add*(a[p<<1].r-a[p<<1].l+1))+(a[p<<1|1].pre+a[p<<1|1].add*(a[p<<1|1].r-a[p<<1|1].l+1));
}
int t;
long long x;
char ch;
long long read()
{
	t=1;
	x=0;
	ch=getchar();
	while(ch<'0'||ch>'9')
	{
		if(ch=='-')t=-t;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
	{
		x=(x<<1)+(x<<3)+ch-'0';
		ch=getchar();
	}
	return t*x;
}
int main()
{
	int n,m,x,y,z,k;
	n=read();
	m=read();
	for(int i=1;i<=n;++i)
	{
		c[i]=read();
	}
	maketree(1,1,n);
//	for(int i=1;a[i].pre>0;i++)
//	{
//		printf("a[%d]:l=%d,r=%d,pre=%d,add=%d;\n",i,a[i].l,a[i].r,a[i].pre,a[i].add);
//	}
	for(int i=1;i<=m;++i)
	{
		k=read();
		if(k==1)
		{
			x=read();
			y=read();
			z=read();
			treeplus(1,x,y,z);
		}
		else
		{
			x=read();
			y=read();
			printf("%lld\n",change(1,x,y));
		}
//		for(int j=1;a[j].pre>0;j++)
//		{
//			printf("a[%d]:l=%d,r=%d,pre=%d,add=%d;\n",j,a[j].l,a[j].r,a[j].pre,a[j].add);
//		}
	}
	return 0;
}
2022/4/8 20:22
加载中...