Porcellesi 爷爷的老农场可以表示为一个 $N \times M$ 的网格(带有围栏),其中每个单元格代表一公顷土地。行从上到下依次编号为 $0$ 到 $N - 1$,列从左到右依次编号为 $0$ 到 $M - 1$。
Porcellesi 按照以下方式规划围栏区域:只要还存在一个矩形区域,他就会在其中以该矩形左上角为左上角,围出尽可能大的正方形。因此,所有最小的围栏区域都是正方形。
图 1:一个 $N = 4$ 且 $M = 7$ 的农场示例。
除了其独特的拓扑结构外,Porcellesi 爷爷的农场里还居住着聪明的奶牛:Dox Taurus。这些奶牛也被称为量子奶牛,它们具有随意消失和重现的能力。(通过这种方式,奶牛可以在不同的围栏区域之间移动。)
Porcellesi 爷爷决定监控奶牛的移动:特别是,他会记录每次奶牛在农场某个单元格中出现或消失。
出于后勤原因,他希望知道在任何给定时刻,单个围栏区域内存在的最大奶牛数量。
正式地,给你 $Q$ 个以下三种类型之一的操作:
add (r, c):在单元格 $(r, c)$ 增加一头奶牛remove (r, c):从单元格 $(r, c)$ 减少一头奶牛count:返回当前时刻任意围栏区域内的最大奶牛数量
请帮助 Porcellesi 爷爷回答 Dox Taurus 奶牛的询问!
输入格式
输入共 $Q + 1$ 行:
- 第 1 行:整数 $N, M, Q$
- 第 $1 + i$ 行($1 \le i \le Q$):描述一个操作:
a r c:在 $(r, c)$ 增加一头奶牛t r c:从 $(r, c)$ 减少一头奶牛c:查询一个围栏正方形内的最大奶牛数量
输出格式
输出共 $C$ 行,其中 $C$ 是 count 类型查询的数量:
- 第 $i$ 行:第 $i$ 次
count类型查询返回的值
数据范围
- $1 \le N, M \le 10^{18}$
- $0 \le Q \le 200\,000$
- 对于每个操作,$0 \le r < N$ 且 $0 \le c < M$
- 农场初始为空
- 每个移除操作都是合法的(即目标单元格中至少有一头奶牛)
子任务
| 子任务 | 分值 | 数据范围 |
|---|---|---|
| 1 | 0 | 仅样例 |
| 2 | 11 | $N \le 50, M \le 50, Q \le 500$ |
| 3 | 21 | $N \le 50, M \le 50, Q \le 20\,000$ |
| 4 | 20 | $N$ 是 $M$ 的倍数 |
| 5 | 27 | $Q \le 500$ |
| 6 | 21 | 无附加限制 |
样例
输入样例 1
4 7 8 a 2 1 a 1 4 a 0 5 a 3 5 c t 0 5 a 3 5 c
输出样例 1
2 2
输入样例 2
13 9 17 a 10 5 a 11 8 c a 9 6 c t 10 5 c a 11 8 a 11 8 c t 11 8 t 11 8 c a 9 0 a 9 4 a 10 1 c
输出样例 2
1 2 1 3 1 2
说明
在第一个样例中:
- 农场初始为空。
- 在处理前 4 个查询后,农场的状态如下:
- 右上角的围栏区域(蓝色正方形)包含 2 头奶牛。
- 第一次
count查询返回 2。
- 在处理接下来的查询后,含有最多奶牛的围栏区域现在有 2 头奶牛。
- 第二次
count查询也返回 2。