知识点1
难写、难调
线段树、平衡树splay、块状链表
树状数组非常好写、好调,也非常好用!
知识点2
int lowbit(int x)
{
return x & -x;
}
返回x
中最后一位1的大小。例如输入6,返回2;输入7返回1;输入8返回8;输入9返回1。
知识点3
树状数组修改操作:
子节点 → 父节点
for(i = x; i <= n; i += lowbit(i)) tr[i] += c;
树状数组查询操作:1~x之和
父节点 → 子节点
for(i = x; i; i = lowbit(i)) tr[i] -= c;
建立树状数组,
for(i = 1; i <= n; i++) add(i, a[i]);