1 #include<cstring>
2 #define MAX 100000
3
4 //数组c为树状数组,MAX为数状数组大小
5 int c[MAX];
6
7 //lowbit函数
8 int lowbit(int x)
9 {
10 return x&(-x);
11 }
12
13 //树状数组求和函数,求c[1]+c[2]+…+c[x]
14 //注意如果题目中可能出现x=0的情况,这里会出现死循环而TLE,改进方法是将原数据全部+1
15 int sum(int x)
16 {
17 int ret=0;
18
19 while(x>0)
20 {
21 ret+=c[x];
22 x-=lowbit(x);
23 }
24
25 return ret;
26 }
27
28 //树状数组的更新操作,即在某一个元素上加之后进行的更新操作
29 void add(int x,int t)
30 {
31 while(x<=MAX)
32 {
33 c[x]+=t;
34 x+=lowbit(x);
35 }
36 }
37
38 int main()
39 {
40 //树状树组的初始化即从1到n执行一遍add操作
41
42 return 0;
43 }