P5893 [IOI 2013] game 游戏
题目背景
警告:**滥用本题评测将被封号**。
题目描述
Bazza 和 Shazza 正在玩游戏。游戏在一个 $R$ 行 $C$ 列的网格上进行。其中, $R$ 行编号为 $0,\cdots, R - 1 $, $C$ 列编号为 $0,\cdots, C - 1 $。我们用 $(P, Q)$ 表示位于 $P$ 行 $Q$ 列的单元格。每个单元格包含一个非负整数,游戏开始时所有单元格内的整数均为零。
游戏如下进行:任意时刻,Bazza 可以做如下动作之一:
- 修改一个单元格 $(p, q)$ 内包含的整数值;
- 要求 Shazza 计算一个给定子矩阵中所有单元格内数字的最大公约数(GCD),子矩阵的两个对角分别为 $(p, q)$ 和 $(u, v)$ (子矩阵包含给定的两个对角点)。
Bazza 会做 $N_U + N_Q$ 次动作(其中,修改单元格内数据 $N_U$ 次,询问 GCD $N_Q$ 次) 。
你的任务是对 Bazza 提出的问题给出正确答案。
输入格式
- 第1行: $R$ 表示网格行数,$C$ 表示网格列数,$N$ 表示操作总数。
- 接下来的 $N$ 行: 每行表示一个动作,以动作发生的先后顺序给出。
表示每个动作的一行的格式如下:
- `update(P,Q,K)` 表示为: `1 P Q K`
- `calculate(P,Q,U,V)` 表示为: `2 P Q U V`
输出格式
共 $N_Q$ 行,对于每次询问,输出答案。
**说明**
`update(P,Q,K)`
- 当Bazza改变单元格中的整数时调用此函数,即把第 $P$ 行第 $Q$ 列的数改为 $K$。
- $P$: 单元格的行号($0 \le P \le R - 1$ )。
- $Q$: 单元格的列号($0 \le Q \le C - 1$ )。
- $K$: 这个单元格中新的整数( $0 \le K \le 10^{18}$)。这个新整数可能与原来的整数相同。
`calculate(P,Q,U,V)`
- 该函数计算以 $(P, Q)$ 和 $(U, V)$ 为对角点的子矩阵中所有整数的最大公约数。这个范围是包含单元格 $(P, Q)$ 和 $(U, V)$ 的。
- 如果这个子矩阵中的所有整数都是 $0$,那么该函数返回 $0$。
- $P$: 子矩阵左上角单元格的行号( $0 \le P \le R - 1$ )。
- $Q$: 子矩阵左上角单元格的列号 ($ 0 \le Q \le C - 1$ )。
- $U$: 子矩阵右下角单元格的行号( $P \le U \le R - 1$ )。
- $V$: 子矩阵右下角单元格的列号( $Q \le V \le C - 1$ )。
说明/提示
**子任务**
| 子任务 | 分数 | $R$ | $C$ | $N_U$ | $N_Q$ |
| :----------: | :----------: | :----------: | :----------: | :----------: | :----------: |
| $1$ | $10$ | $\le 100$ | $\le 100$ | $\le 100$ | $\le 100$ |
| $2$ | $27$ | $\le 10$ | $\le 10^5$ | $\le 10^4$ | $\le 2.5\times 10^5$ |
| $3$ | $26$ | $\le 2 \times 10^3$ | $\le 2 \times 10^3$ | $\le 10^4$ | $\le 2.5 \times 10^5$ |
| $4$ | $17$ | $\le 10^9$ | $\le 10^9$ | $\le 10^4$ | $\le 2.5 \times 10^5$ |
| $5$ | $20$ | $\le 10^9$ | $\le 10^9$ | $\le 2.2 \times 10^4$ | $\le 2.5 \times 10^5$ |
**限制**
对于 $100\%$ 的数据,$1 \le R,C \le 10^9$,$0 \le K \le 10^{18}$,$K$ 表示 Bazza 放到单元格中的数字。