树状数组——模板

#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;
}

  

原文地址:https://www.cnblogs.com/z-bear/p/9412267.html