#57246. 异或矩阵

    ID: 57246 传统题 1000ms 256MiB 尝试: 0 已通过: 0 难度: (无) 上传者: 标签>计蒜客赛事普及T2前缀和位运算魔扣OJ

异或矩阵

暂无测试数据。

在一个 $N \times M$ 的矩阵 $A$ 中,第 $i$ 行,第 $j$ 列的数字为 $A[i][j]$。花椰妹询问蒜头君 $q$ 个问题,对于每个问题,花椰妹会告诉蒜头君四个整数 $x_1,y_1,x_2,y_2$,蒜头君需要回答出左上角为 $(x_1,y_1)$,右下角为 $(x_2,y_2)$ 的矩阵中所有数的异或和。

对于 $N = 4, M = 5$ 的矩阵,如果 $x_1 = 1,y_1 = 2,x_2 = 3,y_2 = 4$,那么表示的矩阵如下图中红色部分。

异或($xor$)是在两个数的二进制对应位上进行运算,运算规则如下:

  • $0 \ xor \ 0 = 0$
  • $0 \ xor \ 1 = 1$
  • $1 \ xor \ 0 = 1$
  • $1 \ xor \ 1 = 0$

C++ 语言中,异或是由 ^ 符号表示,例如:ans = 3 ^ 8;ans = 11

异或和是指多个数进行连续异或的结果,例如:ans = a ^ b ^ c; 其中 $a,b,c$ 均为变量。

输入格式

输入第一行是以空格隔开的两个正整数 $N,M$,表示矩阵的大小。

接下来 $N$ 行,每行有 $M$ 个以空格隔开的非负整数,表示矩阵 $A$。

接下来一行一个正整数 $q$,表示花椰妹共有 $q$ 次询问。

接下来 $q$ 行,每行四个正整数 $x_1,y_1,x_2,y_2$,表示花椰妹询问的矩阵的左上角为 $(x_1,y_1)$,右下角为 $(x_2,y_2)$。

输出格式

输出共 $q$ 行,每行一个非负整数,表示花椰妹询问的矩阵内所有数字的异或和。

数据范围

  • 对于 $30\%$ 的数据,$1\leq N, M \leq 100, 1\leq q \leq 100$;
  • 对于 $100\%$ 的数据,$1 \leq N,M \leq 1000, 1\leq q\leq 10^5, 0\leq A[i][j] \leq 10^9,1\leq x_1 \leq x_2\leq N,1\leq y_1 \leq y_2\leq M$;
4 5
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
1
1 2 3 4
12