设当前所有画了红线的位置为若干点,再加上绳子的两个端点 1,n。 如果把这些位置全部剪断,那么得到的每一段绳子的长度,就是这些点按从小到大排序后,相邻两点的差值。
因此,题目本质上是在动态维护:
小红有一根长度为 n−1 的绳子,她在绳子上均匀的画了 n 个点(包括端点),点的编号为 1∼n,这样绳子被均匀的分为 n−1 段。
她现在提出 Q 次询问,每次询问要求进行下述操作的其中一种:
不考虑绳子的损耗且每次询问独立(即假设绳子剪断,但实际上并不真的剪断),请你回答小红的每次询问。
第一行输入两个整数 n,Q (3≤n≤109; 1≤Q≤105) 代表绳子的长度、小红的操作询问次数。
接下来 Q 行,每行先输入一个整数 op (1≤op≤2) 表示操作询问的类型,随后:
对于每个询问二,若把当前的红线剪断,会存在长度大于等于 k 的绳子,在一行上输出 YES;否则,直接输出 NO。
输入
8 7
2 7
1 4
2 4
2 5
1 6
2 3
2 4
输出
YES
YES
NO
YES
NO
说明
初始时绳子形象的表示为 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8:
1 - 2 - 3 - [4] - 5 - 6 - 7 - 8;1 - 2 - 3 - 4 和 4 - 5 - 6 - 7 - 8,符合询问;1 - 2 - 3 - [4] - 5 - [6] - 7 - 8;1 - 2 - 3 - 4、4 - 5 - 6 和 6 - 7 - 8,符合询问。