树状数组

 1 #include<iostream>
 2 #include<cstdio>
 3 
 4 using namespace std;
 5 const int N=10001;
 6 
 7 int n,m;
 8 int a[N],T[N];
 9 int z,x,y;
10 
11 int  LB(int x)
12 {
13     return x&(-x);
14 }
15 
16 void add(int x,int y)
17 {
18     while(x<=n)
19     {
20         T[x]+=y;
21         x+=LB(x);
22     }
23     return ;
24 }
25 
26 int sum(int x)
27 {
28     int ans=0;
29     while(x)
30     {
31         ans+=T[x];
32         x-=LB(x);
33     }
34     return ans;
35 }
36 
37 int main()
38 {
39     cin>>n;
40     for(int i=1;i<=n;i++)
41     {
42         cin>>a[i];
43         add(i,a[i]);
44     }
45     cin>>m;
46     for(int i=1;i<=m;i++)
47     {
48         cin>>z>>x>>y;
49         if(z==1)add(x,y);
50         else cout<<sum(y)-sum(x-1)<<endl;
51     }
52 }
不懂为什么
不过隐隐约约有点那个意思;
so 代码好背
原文地址:https://www.cnblogs.com/lyqlyq/p/6831593.html