给出矩阵左上角和右下角坐标,矩阵里的元素 1变0 ,0 变1,然后给出询问,问某个点是多少
注意树状数组是向上更新!!
比如:
1 2 2 C 1 1 4 4 Q 1 1这样一组数据
那么矩阵里面是这样的
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int maxn = 1005;
int C[maxn][maxn];
int lowbit(int lo)
{
return lo & (-lo);
}
void modify(int i, int j, int value)
{
for(int x = i; x < maxn; x += lowbit(x))
{
for(int y = j; y < maxn; y += lowbit(y))
{
C[x][y] += value;
}
}
}
int getsum(int i, int j)
{
int sum = 0;
for(int x = i; x > 0; x -= lowbit(x))
{
for(int y = j; y > 0; y -= lowbit(y))
{
sum += C[x][y];
}
}
return sum;
}
int main()
{
int T, n, que, x1, y1, x2, y2;
cin >> T;
char op[10];
while(T--)
{
scanf("%d%d", &n, &que);
memset(C, 0, sizeof(C));
for(int i = 1; i <= que; i++)
{
scanf("%s", op);
//cout << op[0] << endl;
if(op[0] == 'C')
{
scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
x1++;y1++;x2++;y2++;
modify(x2, y2, 1);
modify(x1-1, y1-1, 1);
modify(x2, y1-1, 1);
modify(x1-1, y2, 1);
}
else
{
scanf("%d%d", &x1, &y1);
int ans = getsum(x1, y1) % 2;
cout << ans << endl;
}
}
printf("\n");
}
return 0;
}