求助
  • 板块灌水区
  • 楼主liuhaowen2011
  • 当前回复16
  • 已保存回复16
  • 发布时间2024/11/8 20:54
  • 上次更新2024/11/8 23:20:12
查看原帖
求助
1082470
liuhaowen2011楼主2024/11/8 20:54
#include<bits/stdc++.h>
using namespace std;
struct book{
	long long num;
	int start;
	int end;
	int lazy;
} tree[400001];
int n,m;
int a[100001];
long long ans;
int q;
int aa,bb,cc;
long long make_tree(int w,int l,int r){
	tree[w].start=l;
	tree[w].end=r;
	if(l==r)
		tree[w].num=a[l];
	else
		tree[w].num=make_tree(2*w,l,(l+r)/2)+make_tree(2*w+1,(l+r)/2+1,r);
	tree[w].lazy=0;
	return tree[w].num;
}
void find_tree(int l,int r,int w){
	if(!(tree[w].start>=l&&tree[w].end<=r)){
		if((tree[w].start+tree[w].end)/2>=l)
			find_tree(l,r,w*2);
		if((tree[w].start+tree[w].end)/2+1<=r)
			find_tree(l,r,w*2+1);
	}
	else
		ans+=tree[w].num;
	return;
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
		scanf("%d",&a[i]);
	make_tree(1,1,n);
	for(int i=1;i<=m;i++){
		scanf("%d",&q);
		if(q==1){
			scanf("%d%d%d",&aa,&bb,&cc);
			//aa、bb以内所有数加cc代码
		}
		if(q==2){
			scanf("%d%d",&aa,&bb);
			ans=0;
			find_tree(aa,bb,1);
			cout<<ans<<endl;
		}
	}
	return 0;
}

哪位大佬救一下我的线段树?

2024/11/8 20:54
加载中...