Clarke is a patient with multiple personality disorder. One day, Clarke split into two personality aa and bb, they are playing a game.
There is a n*mn∗m matrix, each grid of this matrix has a number c_{i, j}ci,j.
aa wants to beat bb every time, so aa ask you for a help.
There are qq operations, each of them is belonging to one of the following two types:
The first line contains a integer T(1 \le T \le 5)T(1≤T≤5), the number of test cases.
For each test case:
The first line contains three integers n, m, q(1 \le n, m \le 500, 1 \le q \le 2*10^5)n,m,q(1≤n,m≤500,1≤q≤2∗105)
Then n*mn∗m matrix follow, the ii row jj column is a integer c_{i, j}(0 \le c_{i, j} \le 10^9)ci,j(0≤ci,j≤109)
Then qq lines follow, the first number is optopt.
if opt=1opt=1, then 44 integers x_1, y_1, x_1, y_2(1 \le x_1 \le x_2 \le n, 1 \le y_1 \le y_2 \le m)x1,y1,x1,y2(1≤x1≤x2≤n,1≤y1≤y2≤m) follow, represent operation 11.
if opt=2opt=2, then 33 integers i, j, bi,j,b follow, represent operation 22.
For each testcase, for each operation 11, print YesYes if aa can win this game, otherwise print NoNo.
1 1 2 3 1 2 1 1 1 1 2 2 1 2 1 1 1 1 1 2
Yes No Hint: The first enquiry: aa can decrease grid (1, 2)(1,2)'s number by 11. No matter what bb operate next, there is always one grid with number 11 remaining . So, aa wins. The second enquiry: No matter what aa operate, there is always one grid with number 11 remaining. So, bb wins.
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; #define N 500 + 5 int n, m, q; int c[N][N]; int sum[N][N]; inline int lowbit(int x) { return x & (-x); } void update(int x, int y, int data) { for(int i = x; i <= n; i += lowbit(i)) for(int j = y; j <= m; j += lowbit(j)) sum[i][j] ^= data; } int get_sum(int x, int y) { int res = 0; for(int i = x; i > 0; i -= lowbit(i)) for(int j = y; j > 0; j -= lowbit(j)) res ^= sum[i][j]; return res; } int main() { int T; scanf("%d", &T); while(T--) { memset(sum, 0, sizeof sum); scanf("%d%d%d", &n, &m, &q); for(int i = 1; i <= n ; i++) for(int j = 1; j <= m; j++) { scanf("%d", &c[i][j]); update(i, j, c[i][j]); } int x1, x2, y1, y2, op; while(q--) { scanf("%d", &op); if(op == 1) { scanf("%d%d%d%d", &x1, &y1, &x2, &y2); int ans = 0; ans = get_sum(x2, y2) ^ get_sum(x1 - 1, y1 - 1) ^ get_sum(x2, y1 - 1) ^ get_sum(x1 - 1, y2); (ans == 0) ? printf("No\n") : printf("Yes\n"); } else { scanf("%d%d%d", &x1, &y1, &x2); update(x1, y1, c[x1][y1] ^ x2); c[x1][y1] = x2; } } } return 0; } /* 1 3 3 10 1 1 1 1 1 1 1 1 1 */