树状数组——模板

#include<cstdio>
#include<cstring>
#define maxn 1000001
int c[maxn];
int a[maxn];
int lowbit(int x){
	return x&(-x);
}
int ini(){    //初始化 
	for(int i=1;i<=maxn;i++){
		for(int k=i;k>=i-lowbit(i);k++){
			c[i]+=a[k];
		}
	}
}  
void update(int p,int val){   //单点更新   循环:c[i]—> c[ i+lowbit(i) ] (父节点) 
	for( int i=p; i<=maxn ;i+=lowbit(i) ){
		c[i]+=val;	
	}
}
int getsum(int p){   //区间和   循环:sum+=c[i]; i=i-lowbit(i)
	int sum=0;
	while(p){
		sum+=c[p];
		p=p-lowbit(p);
	}
	return sum;
}

  

posted @ 2018-08-03 10:06  bear_ge  阅读(128)  评论(0编辑  收藏  举报