理解:二进制末位次方为该位置管辖的范围,无法管辖的范围就是该数减去该二进制末位次方,递推往上,直到得到[1,n]的管辖点,然后相加。某个位置修改,会导致管辖它的点也相应被修改,这关键就是二进制的进位来更新管辖它的点,2^0一定被2^1管辖,2^1一定被2^2管辖。因为二进制的独特性,把这些最关键也是最基本的操作降到了log(n)。
一、一维树状数组的基本操作
转载:https://www.cnblogs.com/xenny/p/9739600.html
①单点更新,区间求和
模板:https://www.luogu.com.cn/problem/P3374
1 #include
2 #include
3 #include
②区间修改,单点求值
模板:https://www.luogu.com.cn/problem/P3368
1 #include
2 #include
3 #include
③区间修改,区间求值
模板:https://vjudge.net/problem/POJ-3468
#include
#include
#include
二、二维树状数组的基本操作
①单点修改,区间求值
模板:https://www.acwing.com/problem/content/1271/
1 #include
2 #include
3 #include
②区间修改,单点求值
题目:https://vjudge.net/problem/POJ-2155
题目解析:https://wenku.baidu.com/view/1e51750abb68a98271fefaa8.html
1 #include
2 #include
3 #include