Cross Explosion
题目描述
有一个有 H 行 W 列的网格。令 (i,j) 表示从上数第 i 行、从左数第 j 列的格子。
起初,每个格子里都有一面墙。
按照下面按给定顺序处理 Q 个查询后,求剩余的墙的数量。
在第 q 次查询中,会给出两个整数 Rq 和 Cq。
你在 (Rq,Cq) 放置一个炸弹以摧毁墙。结果会发生如下过程。
如果 (Rq,Cq) 有一面墙,摧毁该墙并结束该次过程。
如果 (Rq,Cq) 没有墙,则从 (Rq,Cq) 向上、下、左、右看时首次出现的墙被摧毁。更精确地说,以下四个过程同时发生:
如果存在某个 i<Rq 使得 (i,Cq) 有墙且对所有 i<k<Rq 都不存在墙,则摧毁 (i,Cq) 处的墙。
如果存在某个 i>Rq 使得 (i,Cq) 有墙且对所有 Rq<k<i 都不存在墙,则摧毁 (i,Cq) 处的墙。
如果存在某个 j<Cq 使得 (Rq,j) 有墙且对所有 j<k<Cq 都不存在墙,则摧毁 (Rq,j) 处的墙。
如果存在某个 j>Cq 使得 (Rq,j) 有墙且对所有 Cq<k<j 都不存在墙,则摧毁 (Rq,j) 处的墙。
输入格式
输入从标准输入给出,格式如下:
H W Q
R1 C1
R2 C2
⋮
RQ CQ
输出格式
输出处理完所有查询后剩余的墙的数量。
2 4 3
1 2
1 2
1 3
2
5 5 5
3 3
3 3
3 2
2 2
1 2
10
4 3 10
2 2
4 1
1 1
4 2
2 1
3 1
1 3
1 2
4 3
4 2
2
提示
1≤H,W
H×W≤4×105
1≤Q≤2×105
1≤Rq≤H
1≤Cq≤W
所有输入值均为整数。处理查询的过程可以如下解释:
在第 1 次查询中,(R1,C1)=(1,2)。(1,2) 有一面墙,所以摧毁了 (1,2) 的墙。
在第 2 次查询中,(R2,C2)=(1,2)。(1,2) 没有墙,所以摧毁了 (2,2),(1,1),(1,3),它们是从 (1,2) 向上、下、左、右 看时首次出现的墙。
在第 3 次查询中,(R3,C3)=(1,3)。(1,3) 没有墙,所以摧毁了 (2,3),(1,4),它们是从 (1,3) 向上、下、左、右 看时首次出现的墙。
处理完所有查询后,剩下两面墙,位于 (2,1) 和 (2,4)。
标签: AtCoder|abc370D
来源
AtCoder|abc370D