线段树模板单点修改,区间查询求助Wa
  • 板块灌水区
  • 楼主Martlet
  • 当前回复15
  • 已保存回复15
  • 发布时间2023/2/25 19:06
  • 上次更新2023/10/23 23:47:20
查看原帖
线段树模板单点修改,区间查询求助Wa
543717
Martlet楼主2023/2/25 19:06
#include<bits/stdc++.h>
using namespace std;
const int N = 1000000+10;
long long sgt[N*4];
int a[N];
void build(int index,int begin,int end){
	if(begin == end){
		sgt[index] = a[begin];
		return ;
	}
    int mid = (begin+end)/2;
    build(index*2,begin,mid);
    build(index*2+1,mid+1,end);
    sgt[index] = sgt[index*2]+sgt[index*2+1];
}
void update(int index,int begin,int end,int i,int x){
	sgt[index] += x;
	if(begin == end)return ;
	int mid = (begin+end)/2;
	if(i <= mid)update(index*2,begin,mid,i,x);
	else update(index*2+1,mid+1,end,i,x); 
}
long long query(int index,int begin,int end,int L,int R){
	if(begin == L&&end == R){
		return sgt[index];
	}
	int mid = (begin+end)/2;
	if(R <= mid)return query(index*2,begin,mid,L,R);
	else if(L > mid)return query,L,(index*2+1,mid +1,end,L,R);
	else return query(index*2,begin,mid,L,mid)+query(index*2+1,mid+1,end,mid+1,R);
}
int main(){
	int n,q;
	scanf("%d %d",&n,&q);
	for(int i = 1;i <= n;i++){
		scanf("%d",&a[i]); 
	} 
	build(1,1,n); 
	while(q--){
		int op;
		scanf("%d",&op);
		if(op == 1){
		    int i,x;
			scanf("%d%d",&i,&x);
			update(1,1,n,i,x);	
		}
		else{
			int l,r;
			scanf("%d%d",&l,&r);
			printf("%lld\n",query(1,1,n,l,r));
		}
		
	}
    return 0;
} 
2023/2/25 19:06
加载中...