树状数组

//最小2的幂 
int lowbit(int n){
    return n&(-n);
}
//A[x]加上y 
void update(int x,int y){//11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    for(;x<=N;x+=lowbit(x))
    c[x]+=y;
}
//查前缀和 
int sum(int x){
    int ans=0;
    for(;x;x-=lowbit(x))
    ans+=c[x];
    return ans;
}
//二维插入(x,y)加上z
int update(int x,int y,int z){
    int i=x;
    while(i<=n){
        int j=y;
        while(j<=m){
            c[i][j]+=z;
            j+=lowbit(j);
        }
        i+=lowbit(i);
    }
} 
//求小于(x,y)的数目 
int sum(int x,int y){
    int res=0,i=x;
    while(i>0){
        int j=y;
        while(j>0){
            res+=c[i][j];
            j-=lowbit(j);
        }
        i-=lowbit(i);
    }
    return res;
}

 

 

 

 

posted @ 2019-03-11 18:46  YFR718  阅读(92)  评论(0编辑  收藏  举报