求调
查看原帖
求调
1340395
tc291311楼主2025/7/23 16:48
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+5;
int n,m,a[N],t[4*N],lazy[N];
void pushup(int k){
	t[k]=t[k*2]+t[k*2+1];
}
void build(int k,int l,int r){
	if(l==r)	t[k]=a[l];
	else{
		int m=l+(r-l)/2;
		build(k*2,l,m);
		build(k*2+1,m+1,r);
		pushup(k);
	}
}
void pushdown(int k){
	if(lazy[k]){
		lazy[k*2]+=lazy[k];
		lazy[k*2+1]+=lazy[k];
		t[k*2]+=lazy[k];
		t[k*2+1]+=lazy[k];
		lazy[k]=0;
	}
}
void updata(int L,int R,int v,int l,int r,int k){
	if(L<=l&&r<=R){
		lazy[k]+=v;
		t[k]+=v;
	}
	else{
		pushdown(k);
		int m=l+(r-l)/2;
		if(L<=m){
			updata(L,R,v,l,m,k<<1);
		}
		else if(R>m){
			updata(L,R,v,m+1,l,k<<1|1);
		}
		pushup(k);
	}
}
int query(int L,int R,int l,int r,int k){
	if(L>=l&&r<=R){
		return t[k];
	}
	else{
		pushdown(k);
		int sum=0;
		int m=l+(r-l)/2;
		if(l<=m){
			sum+=query(L,R,l,m,k<<1);
		} 
		else if(r>m){
			sum+=query(L,R,m+1,l,k<<1|1);
		}
		return sum;
	}
}
signed main(){
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	build(1,1,n);
	while(m--){
		int op;
		cin>>op;
		if(op==1){
			int x,y,k;
			cin>>x>>y>>k;
			updata(x,y,k,1,n,1);
		}
		else if(op==2){
			int x,y;
			cin>>x>>y;
			cout<<query(x,y,1,n,1)<<endl;
		}
	}
	return 0;
} 
2025/7/23 16:48
加载中...