树状数组模板
创建一个存储数组元素a[]和树状数组c[]
写四个函数
- 初始化
init() - 获取最低位1的十进制数
lowbit() - 修改区间
add() - 查询区间
getsum()
点击查看代码
void init(){
for(int i = 1;i<=n;++i){
for(int j = i-lowbit(i)+1;j<=i;++j){
c[i] = c[i] + a[j];
}
}
}
点击查看代码
int lowbit(int x){
return x&-x;//获取当前数最低位1组成的数
}
点击查看代码
void add(int x,int k){
while(x<=n){
c[x] = c[x] + k;
x = x + lowbit(x);
}
}
点击查看代码
int getsum(int x){
int ans = 0;
while(x>0){
ans += c[x];
x -= lowbit(x);
}
}

浙公网安备 33010602011771号