我感觉二维树状数组和而为线段树的思想差不多,都是在原来的基础上加了一个新的树状数组或者是线段树,代码量也不是那么的大。
然后我想找一个图的,但是在百度上面也没有找到什么好点的图,因为一维树状数组解决的是一个区间的和,那么我们每个数下面再加上一个树状数组,
那么我们解决的就是一个矩形区域的所有的数的和。我感觉很显然啊。
下面贴上代码:
int sum(int x,int y) { int ret = 0; for(int i = x;i > 0;i -= lowbit(i)) for(int j = y;j > 0;j -= lowbit(j)) ret += c[i][j]; return ret; } void add(int x,int y,int val) { for(int i = x;i <= n;i += lowbit(i)) for(int j = y;j <= n;j += lowbit(j)) c[i][j] += val; }