题目是让每次对一个子矩阵进行翻转(0变1,1变0),
然后有多次询问,询问某个点是0还是1
这题可以用二维的树状数组来解决,考虑传统的树状数组是改变某个点,然后查询某一段,
而这个题是改变某一段,查询某个点,需要进行一下转换,将原来的改值变成查询,
查询变成改值。改制时相当于对区间分别进行修改,而查询某个点时,
就是将 覆盖这个点的区间全加起来,然后把一维的改成二维的就可以了。
1 #include <cstdio> 2 #include <cstring> 3 #include <queue> 4 #include <cmath> 5 #include <algorithm> 6 #include <set> 7 #include <iostream> 8 #include <map> 9 #include <stack> 10 #include <string> 11 #include <vector> 12 #define pi acos(-1.0) 13 #define eps 1e-6 14 #define fi first 15 #define se second 16 #define lson l,m,rt<<1 17 #define rson m+1,r,rt<<1|1 18 #define bug printf("****** ") 19 #define mem(a,b) memset(a,b,sizeof(a)) 20 #define fuck(x) cout<<"["<<x<<"]"<<endl 21 #define f(a) a*a 22 #define sf(n) scanf("%d", &n) 23 #define sff(a,b) scanf("%d %d", &a, &b) 24 #define sfff(a,b,c) scanf("%d %d %d", &a, &b, &c) 25 #define pf printf 26 #define FRE(i,a,b) for(i = a; i <= b; i++) 27 #define FREE(i,a,b) for(i = a; i >= b; i--) 28 #define FRL(i,a,b) for(i = a; i < b; i++) 29 #define FRLL(i,a,b) for(i = a; i > b; i--) 30 #define FIN freopen("DATA.txt","r",stdin) 31 #define lowbit(x) x&-x 32 #pragma comment (linker,"/STACK:102400000,102400000") 33 34 using namespace std; 35 typedef long long LL ; 36 const int maxn = 1e3 + 10; 37 int n, m; 38 int c[maxn][maxn]; 39 void update(int x, int y) { 40 for (int i = x ; i <= n ; i += lowbit(i)) 41 for (int j = y ; j <= n ; j += lowbit(j)) 42 c[i][j]++; 43 } 44 int getans(int x, int y) { 45 int sum = 0; 46 for (int i = x ; i > 0 ; i -= lowbit(i)) 47 for (int j = y ; j > 0 ; j -= lowbit(j)) 48 sum += c[i][j]; 49 return sum; 50 } 51 int main() { 52 int t, x1, y1, x2, y2; 53 char op[10]; 54 scanf("%d", &t); 55 while(t--) { 56 mem(c, 0); 57 scanf("%d%d", &n, &m); 58 while(m--) { 59 scanf("%s", op); 60 if (op[0] == 'C') { 61 scanf("%d%d%d%d", &x1, &y1, &x2, &y2); 62 x1++, y1++, x2++, y2++; 63 update(x2, y2); 64 update(x1 - 1, y1 - 1); 65 update(x1 - 1, y2); 66 update(x2, y1 - 1); 67 } else { 68 int x, y; 69 scanf("%d%d", &x, &y); 70 printf("%d ", getans(x, y) % 2); 71 } 72 } 73 printf(" "); 74 } 75 return 0; 76 }