#luoguP12049. KMN の培养皿

KMN の培养皿

本题没有可用的提交语言。

题目背景


请仔细阅读提示说明部分。
KMN 是生竞大佬。她有一个培养皿,里面有很多个细胞。每个细胞占据一定的单元格。单元格上会有一个字母表示这个单元格被哪个细胞占据。相同的细胞用相同的字母表示。不同且相邻的细胞用不同的字母表示。

KMN 每次会询问你一个矩形框,如果用这个矩形框去切培养皿,切出来的部分(矩形内部)会包含多少个细胞。如果一个细胞被切成了多份,那么算是多个。
但是,这些细胞也会发生分裂或吞并,所以你还需要维护修改操作。

题目描述

有一个 n×nn\times n 的有色矩阵

连通块是你熟知的网格图四连通定义:从一个单元格 AA 开始,每次走到曼哈顿距离不超过 11 的同色单元格,若能走到另一个单元格 BB,则这两个单元格 A,BA,B 在同一连通块。

qq 次操作。

  • 单点修改操作:修改 (x,y)(x,y) 的字符。
  • 区域查询操作:给出 (l,r,u,d)(l,r,u,d),问如果只保留 [u,d][u,d] 行与 [l,r][l,r] 列交部分的子矩阵,会有多少个连通块。注意:按照上述定义判定两个单元格是否在同一连通块时,不能走到被查询区域之外。

查询操作互相独立。

输入格式

第一行一个正整数 nn
接下来 nn 行,每行 nn 个小写字母,表示有色矩阵。矩阵中颜色不超过 2626 种,分别对应 2626 个小写字母。

接下来一行一个正整数 qq,表示操作个数。
接下来 qq 行每行先是一个正整数 opop,表示操作类型。

  • 修改操作,op=1op=1,同行接下来两个正整数 x,yx,y 和一个字符 cc,表示修改 (x,y)(x,y) 字符为 cc
  • 查询操作,op=2op=2,同行接下来四个正整数 u,l,d,ru, l, d, r,含义如上。

输出格式

q÷2q\div 2 行每行一个正整数表示答案。保证 22 类操作恰好占到一半。

1
a
1
2 1 1 1 1
1
4
aabb
aaaa
aaaa
bbaa
3
2 1 1 4 4
2 2 2 3 3
2 1 1 2 4
3
1
2
5
aaaaa
ababa
aabaa
ababa
aaaaa
9
2 1 1 5 5
1 3 3 a
2 1 1 5 5
1 2 3 b
1 4 3 b
1 3 2 b
1 3 4 b
2 1 1 5 5
2 3 1 3 5
6
5
3
5

提示

本题满分为 3×1053\times 10^5 分。
对于 100%100\% 的数据:
1l,r,u,dn5001\le l,r,u,d\le n\le 500
1q50001\le q\le 5000

保证 1,21,2 操作个数相等。
本题 SubTask 只是为了把同规模数据分到一起,不存在捆绑关系。
测试点信息
|SubTask 编号|n=n=|q=q=| |:-:|:-:|:-:| |11|5050|10001000| |22|5050|50005000| |33|100100|10001000| |44|100100|50005000| |55|300300|10001000| |66|300300|30003000| |77|300300|50005000| |88|500500|10001000| |99|500500|30003000| |1010|500500|50005000|

对于 100%100\% 的数据,保证 KMN 是生竞大神,即使对于 500cm×500cm500\operatorname{cm}\times500\operatorname{cm} 的培养皿也能准确无误地观测到每个格子及变化。
本题采用 Special Judge。当一个测试点有 xx 次 II 类操作时对于一次 II 类操作,若您的答案和标准答案一致,那么您获得 10000x\frac{10000}{x} 的分数。
因此,若您的程序无法解决某次查询问题,请输出一行单个整数(需在 int 范围内),以保证后面的询问能正常获得分数。