树状数组模板

struct Binary_Index_tree
{
    long long a[N];
    void init()
    {
        memset(a,0,sizeof(a));
    }
    //位运算
    int lowbit(int x)
    {
        return x & (-x);
    }

    //修改x这个点,并把所有包含x点的所有点都进行修改
    void modify(int x,int add)
    {
        if(x==0) return ;
        while(x<N)
        {
            a[x]+=add;
            x+=lowbit(x);
        }
    }
    
    //得到[1,x]的和
    long long get_sum(int x)
    {
        long long ret=0;
        while(x!=0)
        {
            ret += a[x];
            x-=lowbit(x);
        }
        return ret;
    }

};

 

posted @ 2016-01-28 12:26  chenhuan001  阅读(172)  评论(0编辑  收藏  举报