【笔记】树状数组

主要是,考虑如何利用这个数组维护东西

二维树状数组

顺带又回顾了一下树状数组的原理

\[C[x][y] = \sum a[i][j], _{x-lowbit(x)<i\leq x,y-lowbit(y)<j\leq y} \]

struct ArrayTree {
	int a[MAXN][MAXN];
	ArrayTree() { memset(a, 0, sizeof(a)); }
	inline int lbt(int x) { return x&(-x); }
	void add(int p, int q, int x) {
		for (int i=p; i< MAXN; i+=lbt(i))
			for (int j=q; j< MAXN; j+=lbt(j)) a[i][j] += x;
	}
	int sum(int p, int q) {
		int res = 0;
		for (int i=p; i; i-=lbt(i))
			for (int j=q; j; j-=lbt(j)) res += a[i][j];
		return res;
	}
}

题目

[USACO17JAN]Promotion Counting P 遍历树,树状数组维护子树信息,附加变量以扣除非子树影响(你来时长啥样,走时长啥样,相减一下,就是你在时(即遍历当前的子树时)是啥样)
[JSOI2009]计数问题 二维树状数组板子题

posted @ 2021-07-20 16:42  zrkc  阅读(47)  评论(0)    收藏  举报