码迷,mamicode.com
首页 > 编程语言 > 详细

树状数组[BIT]

时间:2019-10-27 00:58:32      阅读:76      评论:0      收藏:0      [点我收藏+]

标签:元素   out   ret   更新   求和   return   pre   void   include   

 1 #include <iostream>
 2 using namespace std;
 3 const int maxn=10000;
 4 int a[maxn];
 5 int c[maxn];
 6 
 7 void make_c(int i){
 8     int x=i&(-i);        //2^xi=i&(-i);求区间范围大小,x=2^xi
 9     for(int left=i-x+1;left<=i;left++)    //区间范围[i-2^x+1,i] 
10     {
11         c[i]=c[i]+a[left];    //c[i]表示该区间范围内的元素之和 
12     } 
13 }
14 
15 void updata(int i,int num,int n){        //将a[i]更改为new,更新c[i]数组 
16     while(i<=n)
17     {
18         c[i]=c[i]+num;
19         i=i-i&(-i);
20     }
21 }
22 
23 int sum(int i){        //前i个元素求和 
24     int s=0;
25     while(i>0)
26     {
27         s+=c[i];
28         i-=i&(-i);
29     }
30     return s;
31 }
32 
33 int main(){
34     int n;
35     cin>>n;
36     for(int i=1;i<=n;i++)
37     {
38         cin>>a[i];
39     }
40     for(int i=1;i<=n;i++)
41     {
42         make_c(i);
43     }
44     int ans=sum(4);
45     cout<<ans<<endl;
46     for(int i=1;i<=n;i++)
47         cout<<c[i]<<" ";
48     return 0;
49 }

 

树状数组[BIT]

标签:元素   out   ret   更新   求和   return   pre   void   include   

原文地址:https://www.cnblogs.com/kohano/p/11746271.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!