帮忙看看大佬们
查看原帖
帮忙看看大佬们
1378812
zyt__dp楼主2024/9/25 18:56
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e7+7;
int n,m,a[N],f[N];
void jianshu(int k,int l,int r)
{
	if(l==r){
		f[k]=a[l];
		return ;
	}
	int m=(l+r)/2;
	jianshu(k+k,l,m);
	jianshu(k+k+1,m+1,r);
	f[k]=f[k+k]+f[k+k+1];
}
void add1(int k,int l,int r,int x,int y,int p)
{
	//f[k]+=(r-l)*p;
	if(x<=l&&r<=y){
		f[k]+=(r-l+1)*p;
		return ;
	}
	{
		return ;
	}
	int m=(l+r)>>1;
	if(x<=m){
		add1(k+k,l,m,x,y,p);
	}
	if(y>m)add1(k+k+1,m+1,r,x,y,p);
	f[k]=f[k+k]+f[k<<1+1];
}
int ans(int k,int l,int r,int s,int t)
{
	if(l==s&&r==t)return f[k];
	int m=(l+r)/2;
	if(t<=m)
	{
		return ans(k+k,l,m,s,t);
	}
	else{
		if(s>m)return ans(k+k+1,m+1,r,s,t);
		else{
			return ans(k+k,l,m,s,m)+ans((k+k+1),m+1,r,m+1,t);
		}
	}
}
signed main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	jianshu(1,1,n);
	for(int i=1;i<=m;i++)
	{
		int t,x,y,k;cin>>t; 
		if(t==1)
		{
			cin>>x>>y>>k;
			add1(1,1,n,x,y,k);
		}
		else
		{
			cin>>x>>y;
			cout<<ans(1,1,n,x,y)<<endl;
		}
	}
}

wa了 求调

2024/9/25 18:56
加载中...