用于解决 范围数字和 与 单点增加 问题(复杂度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);
}