树状数组

Posted 远见望远

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树状数组相关的知识,希望对你有一定的参考价值。

https://en.wikipedia.org/wiki/Fenwick_tree

 1 int a[100001];
 2 int b[100001];
 3 int n,m;
 4 int lowbit(int x)
 5 {
 6     return x&(-x);
 7 }
 8 void init()
 9 {
10     scanf("%d%d",&n,&m);
11     for(int i=1;i<=n;i++)
12     {
13         scanf("%d",&a[i]);
14     }
15     for(int i=1;i<=n;i++)
16     {
17         b[i]=a[i];
18     }
19     for(int i=1;i<=n;i++)
20     {
21         b[i+lowbit(i)]+=b[i];
22     }
23     return;
24 }
25 void update(int pos,int delta)
26 {
27     b[pos]+=delta;
28     for(int i=pos;i<=n;i+=lowbit(i))
29     {
30         b[i+lowbit(i)]+=delta;
31     }
32     return;
33 }
34 int query(int l,int r)
35 {
36     int res=0;
37     for(int i=r;i>0;i-=lowbit(i))
38     {
39         res+=b[i];
40     }
41     for(int i=l-1;i>0;i-=lowbit(i))
42     {
43         res-=b[i];
44     }
45     return res;
46 }

 

以上是关于树状数组的主要内容,如果未能解决你的问题,请参考以下文章

数据结构之树状数组从零认识树状数组

树状数组和线段树有啥区别?

树状数组

树状数组

树状数组

如何利用树状数组修改一个区间?