#P1006. Rooks Defenders

Rooks Defenders

鲁克后卫

题目描述

您有一个大小为 n×nn \times n 的正方形棋盘。行的编号从上到下为 11nn ,列的编号从左到右为 11nn 。因此,每个单元格都用一对整数 (x,y)(x, y) ( 1x,yn1 \le x, y \le n ) 表示,其中 xx 是行号, yy 是列号。

您必须执行三种类型的 qq 查询:

  • 在单元格 (x,y)(x, y) 中放入新的车。
  • 从单元格 (x,y)(x, y) 中移除新车。保证之前已经在该单元格中放入了新的车。
  • 检查棋盘的子矩形 (x1,y1)(x2,y2)(x_1, y_1) - (x_2, y_2) 的每个单元是否至少被一只车攻击。

子矩形是单元 (x,y)(x, y) 的集合,其中每个单元都满足两个条件: x1xx2x_1 \le x \le x_2y1yy2y_1 \le y \le y_2

回顾一下,如果是 a=ca = cb=db = d ,那么放置在 (c,d)(c, d) 单元中的车就会攻击 (a,b)(a, b) 单元。具体地说,包含车的单元格会受到这辆车的攻击。

输入格式

输入

第一行包含两个整数 nnqq ( 1n1051 \le n \le 10^5 , 1q21051 \le q \le 2 \cdot 10^5 )--分别是棋盘大小和查询次数。

下面 qq 行中的每一行都包含一个查询的描述。说明以整数 tt ( t{1,2,3}t \in \{1, 2, 3\} ) 开头,表示查询的类型:

  • 如果是 t=1t = 1 ,接下来是两个整数 xxyy1x,yn1 \le x, y \le n )--应放入新车的单元格的坐标。可以保证的是,在给定的查询时刻, (x,y)(x, y) 单元格中没有新的车。
  • 如果是 t=2t = 2 ,那么 xxyy 这两个整数将跟随( 1x,yn1 \le x, y \le n )--要移除新车的单元格的坐标。我们保证在给定的查询时刻, (x,y)(x, y) 单元格中有一车。
  • 如果是 t=3t = 3 , x1,y1,x2x_1, y_1, x_2y2y_2 之后的四个整数( 1x1x2n1 \le x_1 \le x_2 \le n , 1y1y2n1 \le y_1 \le y_2 \le n )- 子矩形,用于检查其中的每个单元格是否至少被一只车攻击。

可以保证在 qq 个询问中至少有一个属于第三种类型的询问。

输出格式

在单独一行中打印第三种类型的每个查询的答案。如果子矩形的每个单元格都至少被一只车攻击,则打印 "是"(不带引号)。

否则打印 "否"(不带引号)。

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

提示

举例说明。经过前两次查询后,棋盘将如下图所示(字母 RR 表示车所在的单元格,第三次查询的子矩形用绿色标出):

进行第三和第四次查询后的棋盘:

执行第五次和第六次查询后的棋盘:

执行第七次和第八次查询后的棋盘:

执行最后两次查询后的棋盘: