线段树全WA求调QAQ(样例过)
查看原帖
线段树全WA求调QAQ(样例过)
452438
_Minecraft12345楼主2023/2/7 14:13
#include<bits/stdc++.h>
using namespace std;
const int _=5e5+10;
struct node { //yigejiedian
	int sum,l,r;
} tree[4*_];
int a[_];
void init(int l,int r,int k) {
	if(l==r) {
		tree[k].l = tree[k].r = l;
		tree[k].sum=a[l];
		return;
	}
	tree[k].l=l;
	tree[k].r=r;
	int mid=(l+r)/2;
	init(l,mid,k*2);
	init(mid+1,r,k*2+1);
	tree[k].sum=tree[k*2].sum+tree[k*2+1].sum;
}
void update(int x,int v,int i) {
	//int i=1;
	tree[i].sum+=v;
		if(tree[i].l==tree[i].r/*||tree[i].r==x*/){
			return;
		}
		int mid=(tree[i].l+tree[i].r)/2;
		if(tree[i].l<=x<=mid){
			update(x,v,i*2);
		}else{
			update(x,v,i*2+1);
		}
	
}
int getsum(int x,int y, int k){
	if(x <= tree[k].l && tree[k].r <= y) {
		return tree[k].sum;
	}
	int ans = 0, mid = (tree[k].l + tree[k].r) / 2;
	if(x <= mid) ans += getsum(x, mid, k * 2);
	if(y > mid) ans += getsum(mid+1, y, k * 2 + 1);
	return ans;
}
int main() {
	int n,m;
	cin>>n>>m;
	for(int i=1; i<=n; i++) {
		cin>>a[i];
	}init(1,n,1);
	for(int i=1; i<=m; i++) {
		int op,x,y;
		cin>>op>>x>>y;
		if(op==1)update(x,y,1);
		else{
			cout<<getsum(x,y,1)<<endl;
		}
	}
	return 0;
}
2023/2/7 14:13
加载中...