2 条题解

  • 0
    @ 2025-7-7 15:46:38
    using namespace std;
    struct Bitree{
    	int tree[500050],n;
    	int lowbits(int x){
    		return x&-x;
    	}
    	void init(int size){
    		n=size;
    		for(int i=0;i<=n;i++) tree[i]=0;
    	}
    	void add(int pos,int val){
    		while(pos<=n){
    			tree[pos]+=val;
    			pos+=lowbits(pos);
    		}
    	}
    	int query(int pos){
    		int ans=0;
    		while(pos>0){
    			ans+=tree[pos];
    			pos-=lowbits(pos);
    		}
    		return ans;
    	}
    	int query(int l,int r){
    		return query(r) - query(l - 1);
    	}
    	
    };
    Bitree  bitree;
    int main(){
    	int n,m;
    	
    	cin>>n>>m;
    	bitree.init(n);
    	for(int i=1;i<=n;i++){
    		int val;
    		cin>>val;
    		bitree.add(i,val);
    	}
    	for(int i=1;i<=m;i++){
    		int op,x,y;
    		cin>>op>>x>>y;
    		if(op==1){
    			bitree.add(x,y);
    		}else{
    			cout<<bitree.query(x,y)<<'\n';
    			
    		}
    	}
    	return 0;
    }`

    [模板] 树状数组1 : 单点修改,区间查询

    信息

    ID
    2426
    时间
    1000ms
    内存
    512MiB
    难度
    6
    标签
    递交数
    15
    已通过
    11
    上传者