用于解决 范围数字和 与 单点增加 问题(复杂度O(logn))
build 方法(构造树状数组)
void build(){
for(int i=1,v;i<=n;i++){
cin>>v;
add(i,v);
}
}
lowbit方法 (获取一个二进制数最低位的1的状态)
int lowbit(int x){
return x&(-x);
}
add方法 (单点增加)
void add(int i,int v){
while(i<=n){
tree[i]+=v;
i+=lowbit(i);
}
}
sum方法(1~i 范围查询)
int sum(int i)//1~i范围累加和
{
int ans=0;
while(i>0){
ans+=tree[i];
i-=lowbit(i);
}
return ans;
}
range 方法(l~r范围查询)
int range(int l,int r){
return sum(r)-sum(l-1);
}
标签:单点,树状,int,sum,板子,add,ans,return
From: https://www.cnblogs.com/benscode/p/18681145