在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码如下:

#include<iostream>
using namespace std;

int n,m;//n个数,操作数为m
int a[500005],tree[500005];//初始数组以及树状数组

int lowbit(int x){
    return x&(-x);
}

int getsum(int x){//求1-x的区间和
    int ans=0;
    for(int i=x;i>0;i-=lowbit(i)){
        ans+=tree[i];
    }
    return ans;
}

void add(int x,int y){//单点更新
    for(int i=x;i<=n;i+=lowbit(i)){
        tree[i]+=y;
    }
}


int ask(int l,int r){//查询区间和
    return getsum(r)-getsum(l-1);
}


int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>a[i];
    }

    for(int i=1;i<=n;i++){//初始化树状数组
        for(int j=i-lowbit(i)+1;j<=i;j++){
            tree[i]+=a[j];
        }
    }

    int command;
    int x,y;//用于单点更新
    int l,r;//用于区间查询
    for(int i=0;i<m;i++){
        cin>>command;
        if(command==1){
            cin>>x>>y;
            add(x,y);
        }else{
            cin>>l>>r;
            cout<<ask(l,r)<<endl;
        }
    }
    return 0;
}
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐