#3204. [Sdoi2013] 城市规划

[Sdoi2013] 城市规划

题目描述

A 市的市长打算在海边开发一段地带。这个地带看成是一个 n×mn \times m 的方格阵。每个格子可以是建筑、道路或者草地。这片地带是要出租给某些公司,但是这些公司的要求很奇怪。他们要求租给他们的建筑要通过道路形成一个连通块。同一个连通块只能租给一家公司。这 n×mn \times m 的方格阵是用字符组成的:O.+|-,其中 O 表示建筑,. 表示草地。|-+ 表示道路,分别表示把上下,左右、上下左右的格子连起来。相邻的 O 表示这是一个建筑物。由于规划可能不太好,可能某些连通块里面只有道路,这里道路是不能出租的!由于最后这块地的选取可能有部分会与其他市共冋开发,所以最后会在这个 n×mn \times m 中选取一段出来,最后选取出来的是一个 n1×m (0<n1n)n1 \times m\ (0<n1\leq n) 的地段。A 市的市长想弄要一个规划软件,支持以下功能:

  1. 改变一个格。
  2. 询问某块地带有多少个带建筑的连通块。

输入格式

第一行两个整数 n,mn, m ,如题意所示。

接下来的 nn 行,每行 mm 个字符表示这片地带的初始情况。

接下来的一行一个整数 qq,表示操作次数。

就下来的 qq 行,每行有两种格式:

  • C i j k:把第 ii 行第 jj 个格子修改成 kk

  • Q l r:询问 (l,1)(l, 1) (r,m)(r, m) 这块地带连通块个数。

输出格式

对于每个询问中的 Q,输出一行,一个数字,表示当前的连通块个数。

4 4
.O..
O+O|
.O..
..OO
4
Q 1 4
C 2 4 +
C 3 4 |
Q 1 4
2
1

数据规模与约定

  • 对于 100%100\% 的数据,n105n \leq 10^5m6m \leq 6q104q \leq 10^4