#11423. 矩阵前缀和

内存限制:256 MiB 时间限制:1000 ms 标准输入输出
题目类型:传统 评测方式:文本比较
上传者: Turing001

题目描述

给定一个 n m 列的矩阵 a ,有 q 次询问,每次给定 (u, v) (x, y) ,请你求出:

(\sum_{i = u}^x \sum_{j = v}^y a_{i,j}) \bmod 2^{64}

也就是求出以 (u, v) 为左上角、 (x,y) 为右下角的矩形元素和对 2^{64} 取余数的结果。

输入格式

本题单测试点内有多组测试数据

输入的第一行是一个整数 T ,表示数据组数。接下来依次给出每组数据的输入信息:

第一行三个整数,依次表示矩阵的行数 n 和列数 m 以及询问数 q
接下来 n 行,每行 m 个整数。第 i 行第 j 个整数表示 a_{i,j}
接下来 q 行,每行四个整数,依次为 u,v,x, y ,表示一组询问。

输出格式

为了避免输出过大,对于每组数据,请输出一行一个整数,表示本组数据的所有询问的答案的按位异或和。

样例

样例输入 #1

2
3 3 3
1 2 3
4 5 6
7 8 9
1 1 3 3
2 1 2 2
1 2 2 3
2 2 1
1 3
4 6
2 2 2 2

样例输出 #1

52
6

样例 1 解释

对第一组数据,三次询问的答案依次为 45,9,16 。其按位异或和为 52

数据范围与提示

对全部的测试点,保证 1 \leq T \leq 10 1 \leq n, m \leq 10^3 1 \leq q \leq 10^6 0 \leq a_i < 2^{64} 1 \leq u \leq x \leq n 1 \leq v \leq y \leq m

数据保证 \sum(n \times m) \leq 10^6 \sum q \leq 10^6 。即输入矩阵的总大小和询问总数均不超过 10^6

【矩阵前缀和】

1、求前缀和数组: s[i][j] 表示 从 [0,0] 位置到 [i,j] 位置的子矩形所有元素之和。即 S(O,D)=S(O,C)+S(O,B)−S(O,A)+D

2、求子矩形和:S(A,D)=S(O,D)−S(O,E)−S(O,F)+S(O,G)