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 }