树状数组模板

来源:互联网 发布:巨人网络 吃鸡 编辑:程序博客网 时间:2024/06/17 03:17
int bit[maxn];//别忘了初始化为0//在bit数组中需要加上x的地方加上x,使得用sum函数查询的时候显示出[i~maxn)区间内所有的元素都加上xvoid add(int i,int x){    while(i<=n){        bit[i]+=x;        i += (i & -i);    }}//利用bit数组的特性求[1~i]这些位置上的数的和int sum(int i){    int s=0;    while(i>0){        s += bit[i];        i -= (i & -i);    }    return s;}//二维上的二维数组和此相似int bit[maxn][maxn];int lowbit(int i){    return i & -i;}void add(int x,int y,int v){    for(int i=x;i<=n;i+=lowbit(i))        for(int j=y;j<=n;j+=lowbit(j))            bit[i][j]+=v;}int sum(int x,int y){    int s=0;    for(int i=x;i>0;i-=lowbit(i))        for(int j=y;j>0;j-=lowbit(j))            s += bit[i][j];    return s;}
0 0
原创粉丝点击