社区讨论

请大佬帮忙挑错(膝盖*3)

P3372【模板】线段树 1参与者 5已保存回复 35

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
35 条
当前快照
1 份
快照标识符
@lo8vxx53
此快照首次捕获于
2023/10/28 01:26
2 年前
此快照最后确认于
2023/10/28 01:26
2 年前
查看原帖
Is there any DaLao to help me?
有大佬帮帮我这个小学僧兼蒟蒻吗?
code go go go!
CPP
#include<bits/stdc++.h>
using namespace std;
long long tree[400005],a[100005],n,m,tag[400005];
void pushup(long long cur){
	tree[cur]=tree[2*cur]+tree[2*cur+1];//l+r=father
	return ;
}
void build(long long cur,long long lt,long long rt){
	if(lt==rt){
		tree[cur]=a[lt];
		return ;
	}
	long long mid = (lt + rt)>>1;
	build(2*cur,lt,mid);
	build(2*cur+1,mid+1,rt);
	pushup(cur);
	return ;
}
void addtag(long long cur,long long lt,long long rt,long long val){
	tag[cur]+=val;
	tree[cur]+=(rt-lt+1)*val;
	return ;
}
void pushdwon(long long cur,long long lt,long long rt){
	if(tag[cur]==0){
		return ;
	}
	long long mid=(lt+rt)>>1;
	addtag(2*cur,lt,mid,tag[cur]);
	addtag(2*cur+1,mid+1,rt,tag[cur]);
	tag[cur]=0;
	return ;
}
long long query(long long cur,long long lt,long long rt,long long qx,long long qy){
	if(qy<lt||rt<qx){
		return 0;
	}
	if(qx<=lt&&rt<=qy){
		return tree[cur];
	}
	pushdwon(cur,lt,rt);
	long long mid = (lt + rt)>>1;
	return query(2*cur,lt,mid,qx,qy)+query(2*cur+1,mid+1,rt,qx,qy);
}
void update(long long cur,long long lt,long long rt,long long qx,long long qy,long long val){
	if(qy<lt||rt<qx){
		return ;
	}
	if(qx<=lt&&rt<=qy){
		addtag(cur,lt,rt,val);
		return;
	}
	pushdwon(cur,lt,rt);
	long long mid = (lt + rt)>>1;
	update(2*cur,lt,mid,qx,qy,val);
	update(2*cur+1,mid+1,rt,qx,qy,val);
	pushup(cur);
	return ;
}
int main(){
	ios_base::sync_with_stdio(0);//让cin/cout变快de黑科技x1
    cin.tie(0);//让cin/cout变快de黑科技x2
    //freopen(".in","r",stdin);
    //freopen(".out","w",stdout);
    cin>>n>>m;
    for(int i=1;i<=n;i++){
    	cin>>a[i];
	}
	build(1,1,n);
	for(int i=1;i<=m;i++){
		long long opt,x,y,val;
		cin>>opt>>x>>y;
		if(opt==1){
			cin>>val;
			update(1,1,n,x,y,val);
		}
		else{
			cout<<query(1,1,n,x,y)<<"\n";
		}
	}
	return 0;
}
违规自杀或删除本帖

回复

35 条回复,欢迎继续交流。

正在加载回复...