树状数组

来源:互联网 发布:淘宝店铺一心好做吗 编辑:程序博客网 时间:2024/06/07 00:57

lowbit就是2^k.

而c[i]就是i-2^k+1   ~     i

#include<iostream>using namespace std;const int maxn = 2000;int a[maxn];int c[maxn];int getsumval(int x){    int sum = 0;    /*while(x>0)    {        sum += c[x];        x -= x&(-x);    } */    for(int i=x; i>0; i-= x&(-x))    {        sum += c[i];    }    return sum;}void add(int x, int v){    /*a[x] += v;    while(x < maxn)    {        c[x] += v;        x += x&(-x);    }*/    a[x] += v;    for(int i=x; i<maxn; i+=x&(-x))    {         c[i] += v;    }}int change(int x, int v){    int addval = v - a[x];    /*while(x < maxn)    {        a[x] = v;        c[x] += addval;        x += x&(-x);    } */    for(int i=x; i<maxn; i+=x&(-x))    {        a[i] = v;        c[i] += addval;    }}int main(){    add(12, 12);    change(11, 2);    change(8, 8);    cout << getsumval(12) << endl;    add(10, 10);    cout << getsumval(12) << endl;    change(10, 5);    cout << getsumval(12) << endl;    return 0;}
/*223227Process returned 0 (0x0)   execution time : 0.253 sPress any key to continue.
*/




0 0
原创粉丝点击