题目描述
给定一个大小为 n×m×k 的三维数组,初始时所有元素均为 0。现有 q 次操作,每次操作给定一个三维子空间 [x1,x2]×[y1,y2]×[z1,z2] 和参数 a,dx,dy,dz,要求对该子空间内的每个位置 (i,j,l) 加上一个等差数列的值:
$$a + (i-x_1) \cdot d_x + (j-y_1) \cdot d_y + (l-z_1) \cdot d_z
$$
请你利用多维差分数组高效处理所有操作,并输出最终数组的所有元素。
输入格式
• 第一行包含四个整数 n, m, k, q(1≤n,m,k≤500,1≤q≤105)。
• 接下来 q 行,每行包含 9 个整数:
x1 x2 y1 y2 z1 z2 a dx dy dz
(保证 1≤x1≤x2≤n,1≤y1≤y2≤m,1≤z1≤z2≤k)
输出格式
• 输出 n×m×k 的三维数组,按以下顺序:
- 第一维度优先(i 从 1 到 n)
- 第二维度次之(j 从 1 到 m)
- 第三维度最后(l 从 1 到 k)
每个元素用空格分隔,每层 i 之间用换行分隔。
样例输入
2 2 2 2
1 2 1 2 1 2 1 1 0 0
1 1 1 2 1 2 0 0 2 0
样例输出
1 1
3 3
6 6
10 10
样例解释
-
第一次操作:对整个空间 [1,2]×[1,2]×[1,2] 的每个 (i,j,l) 加 (1+(i−1)⋅1)
• (1,1,1) 加 1 → 值变为 1
• (2,1,1) 加 2 → 值变为 2
• (1,2,1) 加 1 → 值变为 1
• (2,2,1) 加 2 → 值变为 2
(其他 l=2 的位置同理)
-
第二次操作:对 [1,1]×[1,2]×[1,2] 的每个 (i,j,l) 加 (0+(j−1)⋅2)
• (1,1,1) 加 0 → 保持 1
• (1,2,1) 加 2 → 值变为 3
(其他 l=2 的位置同理)
最终输出按 i,j,l 顺序展开。
题目设计意图
- 考察多维差分:将二维差分扩展到三维,需要理解高维容斥原理。
- 数学建模能力:如何将等差数列增量拆解为多个方向的线性组合。
- 编码实现难度:需谨慎处理差分标记的 8 个顶点和四重前缀和。
数据范围设为 n,m,k≤100