树状数组

来源:互联网 发布:it应届生简历 编辑:程序博客网 时间:2024/06/03 22:02

看了半天树状数组,感觉到其神奇,但没懂其原理,先贴个模板,带我细细研究...⊙﹏⊙b

 

/*一定要注意数组c的初始化,N是数组的大小,modify的功能是把第n个元素加上delta,而sum的功能则是求从第一个元素开始到第n个元素之和,当然也可以求一段区间上的和,比如我要求第x个元素到第y个元素的和,答案就是sum(y) - sum(x - 1)*/#include <iostream>using namespace std;int N,c[1000],a[10];int lowbit( int n ){    return n & (-n);}void modify( int n, int delta ){    while ( n <= N )    {        c[n] += delta;        n += lowbit(n);    }}int sum( int n ){    int ret = 0;    N=10;    while ( n != 0 )    {        ret += c[n];        n -= lowbit(n);    }    return ret;}int main(){for(int i=1;i<=10;i++){modify(i,i);}cout<<sum(4)<<endl;return 0;}


 

原创粉丝点击