找了半天都找不到bug
查看原帖
找了半天都找不到bug
483058
陈泽涵爱g编程楼主2022/3/24 21:25
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=1e5*8+1;
#define ll long long
long long tree[maxn],tag[maxn];
int n,m,a,b,d,opt;
ll c;
void pushdown(int rt,int l,int r){
	tree[rt]+=tag[rt]*(r-l+1);
	tag[rt<<1]+=tag[rt];
	tag[rt<<1|1]+=tag[rt];
	tag[rt]=0;
}
void pushup(int rt,int l,int r){
	ll mid=((l+r)>>1);
	pushdown(rt,l,r);
	pushdown(rt<<1,l,r);
	pushdown(rt<<1|1,l,r);
	tree[rt]=tree[rt<<1]+tree[rt<<1|1];
}
void update(int rt,int L,int R,int l,int r,ll val){
	pushdown(rt,L,R);
	ll mid=((L+R)>>1);
	if(L>=l&&R<=r){
		tree[rt]+=val;
		return;
	}
	if(l<=mid){
		update(rt<<1,L,mid,l,r,val);
	}
    if(r>mid){
    	update(rt<<1|1,mid+1,R,l,r,val);
	} 
	pushup(rt,L,R);
}
ll quary(int rt,int l,int r,int L,int R){
	int mid=((l+r)>>1);
	pushdown(rt,l,r);
	ll ans=0;
	if(l>=L&&r<=R){
		return tree[rt];
	}
	if(mid>=L){
		ans+=quary(rt<<1,l,mid,L,R);
	}
	if(R>mid){
		ans+=quary(rt<<1|1,mid+1,r,L,R);
	}
	return ans;
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		scanf("%d",&c);
		update(1,1,n,i,i,c);
	}
	for(int i=1;i<=m;i++){
		scanf("%d",&opt);
		if(opt==1){
			scanf("%d%d%lld",&a,&b,&c);
			update(1,1,n,a,b,c);
		}else{
			scanf("%d%d",&a,&b);
			printf("%lld\n",quary(1,1,n,a,b));
		}
	}
	return 0;
}
2022/3/24 21:25
加载中...