树状数组模板

创建一个存储数组元素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);
  }
}
posted @ 2025-03-31 15:12  我与地坛  阅读(45)  评论(0)    收藏  举报