#12. 子矩阵的和
子矩阵的和
输入一个 行 列的整数矩阵,再输入 个询问,每个询问包含四个整数 ,表示一个子矩阵的左上角坐标和右下角坐标。
对于每个询问输出子矩阵中所有数的和。
输入格式
第一行包含三个整数 。
接下来 行,每行包含 个整数,表示整数矩阵。
接下来 行,每行包含四个整数 ,表示一组询问。
输出格式
共 行,每行输出一个询问的结果。
数据范围
,
,
,
,
输入样例:
3 4 3
1 7 2 4
3 6 2 8
2 1 2 3
1 1 2 2
2 1 3 4
1 3 3 4
输出样例:
17
27
21
数据 1(样例结构+额外查询):基础正确性;卡公式写错、漏加/漏减项、输出行数不对。
数据 2(1×1 且为负):卡最小边界与负数处理;也卡数组越界(x1-1/y1-1)。
数据 3(1×m 单行):卡把二维前缀和写错(特别是行/列维度混用),以及退化成一维时的边界错误。
数据 4(n×1 单列):同上,卡单列退化、边界与索引错误。
数据 5(全 0):卡“前缀数组未初始化/累加写错”导致输出出现非 0。
数据 6(专门的边界查询):卡 x1=1 或 y1=1 时的处理(很多人忘了补 0 边界),以及 off-by-one。
数据 7(30×40 随机 + 5000 查询):综合覆盖,卡零散实现 bug(坐标读错、公式项顺序错等)。
数据 8(1000×1000 全 1,q=200000 压测):强力卡复杂度:
暴力每次遍历子矩阵会 TLE
I/O 慢、没用快速读写也容易卡(q 很大)
数据 9(1000×1000 棋盘 ±1000):卡大规模正负抵消、边界与正确性;也能卡“用 32 位 int 存前缀和/答案”在某些实现里溢出风险(建议用 64 位)。