博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
树状数组
阅读量:4286 次
发布时间:2019-05-27

本文共 733 字,大约阅读时间需要 2 分钟。

lowbit(x) 为x的二进制表达式中最右边的1所对应的值   比如:38228的二进制是1001010110010000,所以lowbit(38228) = 16;(二进制是10000)   lowbit(x) = x&(-x);计算机里的整数采用补码表示因此-x实际上是x按位取反,末尾加1以后的结果   38288 = 1001010110010000  -38288 = 0110101001110000    二者按位取"与"之后,前面的部分变0,之后lowbit保持不变
sum[1] = a[1];    sum[2] = a[2];    sum[3] = a[3];    sum[4] = a[1] + a[2] + a[3] + a[4];     sum[5] = a[5];    sum[6] = a[5] + a[6];    sum[7] = a[7];    sum[8] = a[1] + a[2] + a[3] + a[4] + a[5] + a[6] + a[7] + a[8];

int lowbit(int x){    return x&(-x);}int Getsum(int pos){    int res = 0;    while(pos > 0)    {        res += a[pos];        pos -= lowbit(pos);    }    return res;}void add(int pos,int num){    while(pos <= n)    {        a[pos] += num;        pos += lowbit(pos);    }}

转载地址:http://sysgi.baihongyu.com/

你可能感兴趣的文章