#CSP202406B. 矩阵重塑(其二)

矩阵重塑(其二)

时间限制: 1.0 秒

空间限制: 512 MB

题目背景

矩阵转置操作是将矩阵的行和列交换的过程。在转置过程中,原矩阵 A\mathbf{A} 的元素 ai,ja_{i,j} 会移动到转置后的矩阵 AT\mathbf{A}^Taj,ia_{j,i} 的位置。这意味着 A\mathbf{A} 的第 ii 行第 jj 列的元素在 AT\mathbf{A}^T 中成为了第 jj 行第 ii 列的元素。

例如,有矩阵 A\mathbf{A} 如下:

$$\mathbf{A} = \begin{bmatrix} a & b & c \\ d & e & f \end{bmatrix}$$

它的转置矩阵 AT\mathbf{A}^T 会是:

$$\mathbf{A}^T = \begin{bmatrix} a & d \\ b & e \\ c & f \end{bmatrix}$$

矩阵转置在线性代数中是一个基本操作,广泛应用于各种数学和工程领域。

题目描述

给定 n×mn \times m 的矩阵 M\mathbf{M},试编写程序支持以下查询和操作:

  1. 重塑操作 p,qp,q:将当前矩阵重塑为 p×qp \times q 的形状(重塑的具体定义见上一题);
  2. 转置操作:将当前矩阵转置;
  3. 元素查询 i,ji,j:查询当前矩阵第 iijj 列的元素(0i<n0 \le i < n0j<m0 \le j <m)。

依次给出 tt 个上述查询或操作,计算其中每个查询的结果。

输入格式

从标准输入读入数据。

输入共 n+t+1n + t + 1 行。

输入的第一行包含三个正整数 n,m,tn,m,t

接下来依次输入初始矩阵 M\mathbf{M} 的第 00 到第 n1n - 1 行,每行包含 mm 个整数,按列下标从 00m1m - 1 的顺序依次给出。

接下来输入 tt 行,每行包含形如 op a bop\ a\ b 的三个整数,依次给出每个查询或操作。具体输入格式如下:

  • 重塑操作:1 p q1\ p\ q
  • 转置操作:2 0 02\ 0\ 0
  • 元素查询:3 i j3\ i\ j

输出格式

输出到标准输出。

每个查询操作输出一行,仅包含一个整数表示查询结果。

3 2 3
1 2
3 4
5 6
3 0 1
1 2 3
3 1 2
2
6
3 2 5
1 2
3 4
5 6
3 1 0
2 0 0
3 1 0
1 3 2
3 1 0
3
2
5

初始矩阵: $\begin{bmatrix} 1 & 2\\ 3 & 4\\ 5 & 6 \end{bmatrix}$, (1,0)(1, 0) 位置元素为 33

转置后: $\begin{bmatrix} 1 & 3 & 5\\ 2 & 4 & 6 \end{bmatrix}$, (1,0)(1, 0) 位置元素为 22

重塑后: $\begin{bmatrix} 1 & 3\\ 5 & 2\\ 4 & 6 \end{bmatrix}$, (1,0)(1, 0) 位置元素为 55

子任务

80%80\% 的测试数据满足 t100t \le 100

全部的测试数据满足:

  • t105t \le 10^{5} 且其中转置操作的次数不超过 100100
  • n,mn,m 和所有重塑操作中的 p,qp,q 均为正整数且 n×m=p×q104n \times m = p \times q \le 10^{4}
  • 输入矩阵中每个元素的绝对值不超过 10001000

提示

  • 对于 n×mn \times m 的矩阵,虽然转置和重塑操作都可以将矩阵形态变为 m×nm \times n,但这两种操作通常会导致不同的结果。
  • 评测环境仅提供各语言的标准库,特别地,不提供任何线性代数库(如 numpypytorch 等)。