#3786. 三维空间等差数列更新-省选压轴题

三维空间等差数列更新-省选压轴题

题目描述

给定一个大小为 n×m×kn \times m \times k 的三维数组,初始时所有元素均为 00。现有 qq 次操作,每次操作给定一个三维子空间 [x1,x2]×[y1,y2]×[z1,z2][x_1, x_2] \times [y_1, y_2] \times [z_1, z_2] 和参数 a,dx,dy,dza, d_x, d_y, d_z,要求对该子空间内的每个位置 (i,j,l)(i,j,l) 加上一个等差数列的值:

$$a + (i-x_1) \cdot d_x + (j-y_1) \cdot d_y + (l-z_1) \cdot d_z $$

请你利用多维差分数组高效处理所有操作,并输出最终数组的所有元素。


输入格式

• 第一行包含四个整数 nn, mm, kk, qq1n,m,k5001 \leq n,m,k \leq 5001q1051 \leq q \leq 10^5)。
• 接下来 qq 行,每行包含 99 个整数:
x1x_1 x2x_2 y1y_1 y2y_2 z1z_1 z2z_2 aa dxd_x dyd_y dzd_z
(保证 1x1x2n1 \leq x_1 \leq x_2 \leq n1y1y2m1 \leq y_1 \leq y_2 \leq m1z1z2k1 \leq z_1 \leq z_2 \leq k

输出格式

• 输出 n×m×kn \times m \times k 的三维数组,按以下顺序:

  1. 第一维度优先(ii11nn
  2. 第二维度次之(jj11mm
  3. 第三维度最后(ll11kk
    每个元素用空格分隔,每层 ii 之间用换行分隔。

样例输入

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. 第一次操作:对整个空间 [1,2]×[1,2]×[1,2][1,2] \times [1,2] \times [1,2] 的每个 (i,j,l)(i,j,l)(1+(i1)1)(1 + (i-1) \cdot 1)
    (1,1,1)(1,1,1)11 → 值变为 11
    (2,1,1)(2,1,1)22 → 值变为 22
    (1,2,1)(1,2,1)11 → 值变为 11
    (2,2,1)(2,2,1)22 → 值变为 22
    (其他 l=2l=2 的位置同理)

  2. 第二次操作:对 [1,1]×[1,2]×[1,2][1,1] \times [1,2] \times [1,2] 的每个 (i,j,l)(i,j,l)(0+(j1)2)(0 + (j-1) \cdot 2)
    (1,1,1)(1,1,1)00 → 保持 11
    (1,2,1)(1,2,1)22 → 值变为 33
    (其他 l=2l=2 的位置同理)

最终输出按 i,j,li,j,l 顺序展开。

题目设计意图

  1. 考察多维差分:将二维差分扩展到三维,需要理解高维容斥原理
  2. 数学建模能力:如何将等差数列增量拆解为多个方向的线性组合。
  3. 编码实现难度:需谨慎处理差分标记的 88 个顶点和四重前缀和。

数据范围设为 n,m,k100n,m,k \leq 100