有个xiao理解:
初始化树状数组;在输入原数组的同时将第 i 个数加到在树状数组中,
区间修改我理解的就是树状数组的两个单点修改
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int n;
int a[10004];
int c[10004];//树
int lowbit(int x){
return x&-x;
}
//=======================生成树状数组
void built(int x,int k){
while(x<=n){
c[x]+=k;
x+=lowbit(x);
}
}
//=======================求前i的和
int sum(int x){
int ret=0;
while(x>0){
ret+=c[x];
x-=lowbit(x);
}
return ret;
}
//============================单点修改
//在x上加上val
void up(int x,int val){
while(x<=n){
c[x]+=val;
x+=lowbit(x);
}
}
//==========================区间修改
void UP(int a,int b,int val){
up(b,val);
up(a-1,-val);
}
//===========================