0
点赞
收藏
分享

微信扫一扫

【树状数组】 POJ 2155 Matrix

以沫的窝 2023-07-05 阅读 67


水水的二维树状数组,代码写搓了,找了好久的错。。。

【树状数组】 POJ 2155 Matrix_#define

【树状数组】 POJ 2155 Matrix_#define

【树状数组】 POJ 2155 Matrix_#define

【树状数组】 POJ 2155 Matrix_#define

【树状数组】 POJ 2155 Matrix_#define

【树状数组】 POJ 2155 Matrix_#define

【树状数组】 POJ 2155 Matrix_#define

【树状数组】 POJ 2155 Matrix_#define

#include <iostream>
#include <sstream>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <bitset>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <climits>
#define maxn 1005
#define eps 1e-7
#define mod 1000000007
#define INF 99999999
#define lowbit(x) (x&(-x))
typedef long long LL;
using namespace std;

int tree[maxn][maxn];
char s[10];
int n, m;
void add(int xx1, int yy1, int xx2, int yy2)
{
	int i, j;
	for(i=xx1;i<=n;i+=lowbit(i))
		for(j=yy1;j<=n;j+=lowbit(j))
			tree[i][j]+=1;
	for(i=xx2+1;i<=n;i+=lowbit(i))
		for(j=yy2+1;j<=n;j+=lowbit(j))
			tree[i][j]+=1;
	for(i=xx2+1;i<=n;i+=lowbit(i))
		for(j=yy1;j<=n;j+=lowbit(j))
			tree[i][j]-=1;
	for(i=xx1;i<=n;i+=lowbit(i))
		for(j=yy2+1;j<=n;j+=lowbit(j))
			tree[i][j]-=1;
}
int query(int x, int y)
{
	int i, j, ans=0;
	for(i=x;i>0;i-=lowbit(i))
		for(j=y;j>0;j-=lowbit(j))
			ans+=tree[i][j];
	return ans;
}
void solve(void)
{
	int x, y, xx1, yy1, xx2, yy2;
	memset(tree, 0, sizeof tree);
	while(m--){
		scanf("%s", s);
		if(s[0]=='Q'){
			scanf("%d%d",&x,&y);
			printf("%d\n", query(x, y)%2);
		}
		else{
			scanf("%d%d%d%d",&xx1,&yy1,&xx2,&yy2);
			add(xx1, yy1, xx2, yy2);
		}
	}
}
int main(void)
{
	int _;
	while(scanf("%d",&_)!=EOF){
		while(_--){
			scanf("%d%d",&n,&m);
			solve();
			if(_) printf("\n");
		}
	}
	return 0;
}




举报

相关推荐

0 条评论