1 条题解

  • 0
    @ 2019-03-27 21:58:47

    高级数据结构入门题目。

    树状数组基本操作。

    虽然线段树也可以做。

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int n,m,i,num[100001],t[200001],l,r; 
    int lowbit(int x){
        return x&(-x);
    }
    void change(int x,int p){ 
        while(x<=n){
            t[x]+=p;
            x+=lowbit(x);
        }
        return;
    }
    int sum(int k){
        int ans=0;
        while(k>0){
            ans+=t[k];
            k-=lowbit(k);
        }
        return ans;
    }
    int ask(int l,int r){
        return sum(r)-sum(l-1); 
    }
    int main(int argc,char *argv[]){
        cin>>n>>m;
        for(i=1;i<=n;i++){
            cin>>num[i];
            change(i,num[i]);
        }
        for(i=1;i<=m;i++)
        {
            cin>>l>>r;
            cout<<ask(l,r)<<endl;
        }
        return 0;
    }
    
    
  • 1

信息

难度
3
分类
线段树树状数组 点击显示
标签
递交数
1
已通过
1
通过率
100%
上传者