#P1006. Rooks Defenders
Rooks Defenders
从文件 c.in 中读入数据。
本题数据量较大,请用较快的读入方式
会根据做题情况判断是否开大时限,时限严格是std两倍以上
您有一个大小为 的正方形棋盘。行的编号从上到下为 至 ,列的编号从左到右为 至 。因此,每个单元格都用一对整数 表示,其中 是行号, 是列号。
您必须执行三种类型的 查询:
- 在单元格 中放入新的车。
- 从单元格 中移除新车。保证之前已经在该单元格中放入了新的车。
- 检查棋盘的子矩形 的每个单元是否至少被一只车攻击。
子矩形是一组单元 ,其中每个单元都满足两个条件: 和 。
回顾一下,如果满足 或 两个条件,那么 单元就会被放置在 单元中的车攻击。具体地说,包含车的单元格会受到这辆车的攻击。
输入
第一行包含两个整数 和 --分别是棋盘大小和查询次数。
下面每行 包含一个查询的描述。说明以整数 开头,表示查询的类型:
- 如果是 ,则接下来是两个整数 和 --应放入新车的单元格的坐标。在给定的查询时刻, 单元格中肯定没有新的车。
- 如果是 ,那么 和 这两个整数将跟随 --要移除新车的单元格的坐标。我们保证在给定的查询时刻, 单元格中有一车。
- 如果是 ,则 之后的四个整数 $ (1 \leq x_1 \leq x_2 \leq n, 1 \leq y_1 \leq y_2 \leq n)$ 是要检查其中每个单元格是否至少被一只车攻击的子矩形。
可以保证在 个询问中至少有一个属于第三种类型的询问。
输出
在单独一行中打印第三种类型的每个查询的答案。如果子矩形的每个单元格都至少被一只车攻击,则打印 "YES" (不带引号)。
否则打印 "NO" (不带引号)。
示例
输入
8 10
1 2 4
3 6 2 7 2
1 3 2
3 6 2 7 2
1 4 3
3 2 6 4 8
2 4 3
3 2 6 4 8
1 4 8
3 2 6 4 8
输出
NO
YES
YES
NO
YES
注
举例说明。经过前两次查询后,棋盘将如下图所示(字母 R 表示车所在的单元格,第三次查询的子矩形用绿色标出):
![](file://k7QMmkZndO8LPTvLbtGq0.png)
进行第三和第四次查询后的棋盘:
![](file://KWNRGiTQa97JF3B9w7jyy.png)
执行第五次和第六次查询后的棋盘:
![](file://xOkK6hSbhxSaL8EB94Ufw.png)
执行第七和第八次查询后的棋盘:
![](file://Z4nWFku1DeqcZ5msKt5Oy.png)
执行最后两次查询后的棋盘:
![](file://Ft9JmvywcD_4HU9_8b-hi.png)
数据范围
### 温馨提醒数组开大一点,后面数据的n可能会大1,建议+10
对于20%的数据 ,
对于50%的数据 ,
对于80%的数据 ,
对于100%的数据
-
是棋盘的大小,表示行数和列数的最大值,范围为
-
是查询的数量,表示有多少次操作,范围为
-
每个查询涉及的坐标 、,以及子矩形的边界 都满足 。
相关
在下列比赛中: