1.数状数组
1.1 数状数组定义
- 树状数组是一个查询和修改复杂度都为log(n)的数据结构。主要用于数组的单点修改&&区间求和.
1.2 数状数组树核心内容:
int low_bit(int x) {
return x & (-x);
}
1.3 数状数组的单点更新:
int add(int pos,int y) {
for(int i = pos;i <= n;i = i + low_bit(i)) {
crr[i] = crr[i] + y;
}
}
1.4 数状数组的区间查询:
int getsum(int x) {
int res=0;
for(int i = x; i >= 1; i = i-low_bit(i)) {
res += crr[i];
}
return res;
}
1.5 数状数组的初始化
for(int i = 1; i <= n; i++) {
cin >>x ;
add(i,x);
}
1.6 数状数组应用:
- 题目:LeetCode求逆序对