树状数组的两个操作:
- 单点更新
- 区间查询
树状数组模板:
vector<int> tr(n + 1);
int lowbit(int x){
return x & -x;
}
int query(int x){
int res = 0;
for(int i = x; i; i -= lowbit(i)) res += tr[i];
return res;
}
void add(int x,int v){
for(int i = x;i <= n;i += lowbit(i)) tr[i] += v;
}
例题
315.计算右侧小于当前元素的个数