全WA求条
查看原帖
全WA求条
921177
liuhaoyan0323楼主2024/5/4 16:27
#include<bits/stdc++.h>
#define int long long
#define N 100005
using namespace std;
typedef struct TreeNode{
	int l,r,sum,add;
}TreeNode;
TreeNode tr[N*4];
int n,m,x,y,k,arr[N];
char opt;
void pushdown(int idx){
	if(tr[idx].add){
		tr[idx<<1].sum+=tr[idx].add*(tr[idx<<1].r-tr[idx<<1].l+1);
		tr[idx<<1].add+=tr[idx].add;
		tr[(idx<<1)|1].sum+=tr[idx].add*(tr[(idx<<1)|1].r-tr[(idx<<1)|1].l+1);
		tr[(idx<<1)|1].add+=tr[idx].add;
		tr[idx].add=0;
	}
}
void update(int idx,int l,int r,int date){
	if(l<=tr[idx].l&&r>=tr[idx].r){
		tr[idx].sum+=(tr[idx].r-tr[idx].l+1)*date;
		tr[idx].add+=date;
		return ;
	}
	pushdown(idx);
	int mid=(tr[idx].l+tr[idx].r)>>1;
	if(l<=mid)update(idx<<1,l,mid,date);
	if(r>mid)update(idx<<1|1,l,r,date);
	pushdown(idx);
}
void pushup(int idx){
	tr[idx].sum=tr[idx<<1].sum+tr[idx<<1|1].sum;
}
void build(int idx,int l,int r){
	tr[idx].l=l;
	tr[idx].r=r;
	if(l==r){
		tr[idx].sum=arr[l];
		return ;
	}
	int mid=(l+r)>>1;
	build(idx<<1,l,mid);
	build(idx<<1|1,mid+1,r);
	pushup(idx);
}
int query(int idx,int l,int r){
	if(l<=tr[idx].l&&r>=tr[idx].r)return tr[idx].sum;
	int mid=(tr[idx].l+tr[idx].r)>>1,res=0;
	if(l<=mid)res+=query(idx<<1,l,mid);
	if(r>mid)res+=query(idx<<1|1,mid+1,r);
	return res;
}
signed main(){
	scanf("%lld %lld",&n,&m);
	for(int i=1;i<=n;++i){
		scanf("%lld",&arr[i]);
	}
	build(1,1,n);
	for(int i=1;i<=m;++i){
		cin>>opt;
		scanf("%lld%lld",&x,&y);
		switch(opt){
			case '1':
				scanf("%lld",&k);
				update(1,x,y,k);
				break;
			case '2':
				printf("%lld\n",query(1,x,y));
				break;
		}
	}
}

2024/5/4 16:27
加载中...