#P4886. 「ROI 2025 Day1」天狼星的换班

「ROI 2025 Day1」天狼星的换班

「ROI 2025 Day1 T2」天狼星换班

题目描述

你有没有好奇过,为什么天狼星教育中心的两期项目之间总会隔上几天?答案很简单:员工们需要在这段时间里把宿舍楼的房间整理一新,为下一期项目做准备!

天狼星酒店的某层楼有 nn 个房间,编号从 11nn。每次教育项目结束后,这些房间都需要进行维修。 为此,中心雇佣了 kk 名员工,编号从 11kk。每位员工负责一段房间范围,从 lil_irir_i(包含两端),并且每人有一个固定的起点房间 mim_i,他们必须从这个房间开始检查和维修。不同员工的负责范围可能会有重叠,甚至完全相同。

员工们会按照某种顺序从基地出发去维修房间。每次只有前一位员工返回基地后,下一位员工才会出发。

当第 ii 位员工出发时,他会先前往起点房间 mim_i

  • 如果这个房间仍需维修,员工会修好它,然后继续检查并维修他负责范围 lil_irir_i 内所有仍需维修的房间。完成后,他返回基地。此时,他负责的整个范围内的房间都不再需要维修。
  • 如果起点房间 mim_i 已经被其他先出发的员工修好,员工会直接返回基地,寄希望于同事们已经顺便修好了他负责范围内的其他房间。但实际上,他负责范围内可能仍有房间需要维修。

你的任务是判断,是否能通过合理安排员工的出发顺序,让所有 11nn 的房间最终都被修好。

输入格式

输入包含多组数据。第一行是一个整数 tt (1t105)(1 \leq t \leq 10^5),表示数据组数。接着是每组数据的描述。

每组数据的第一行包含两个整数 nnkk (1n,k5105)(1 \leq n, k \leq 5 \cdot 10^5),分别表示房间数量和员工数量。

接下来的 kk 行,每行包含三个整数 li,mi,ril_i, m_i, r_i (1limirin)(1 \leq l_i \leq m_i \leq r_i \leq n),分别表示第 ii 位员工负责范围的起点房间、必须开始检查的起点房间,以及范围的终点房间。

保证所有数据组的 nnkk 之和均不超过 51055 \cdot 10^5

输出格式

对每组数据,输出单独的一行。如果可以修好所有房间,输出 YES;否则输出 NO

样例

输入

2
5 2
3 4 5
1 3 3
5 3
1 2 4
2 4 5
3 3 3

输出

YES
NO

样例解释
在第一组数据中,先派第 22 位员工出发,他会修好房间 1133。然后派第 11 位员工出发,他前往房间 44,发现它仍需维修,于是修好他负责范围内剩余的房间。最终,所有房间都被修好。

在第二组数据中,无法找到一个合适的员工出发顺序来修好所有房间。

数据范围与提示

NN 为所有数据组的 nn 之和,KK 为所有数据组的 kk 之和。

详细子任务附加限制及分值如下表所示。其中子任务 00 是样例。

子任务 分值 附加限制 子任务依赖
1 5 K10,000K \leq 10,000mi=lim_i = l_i
2 N500N \leq 500k8k \leq 8 0
3 2 n18n \leq 18K500K \leq 500
4 12 n50n \leq 50K50K \leq 50
5 9 n150n \leq 150K150K \leq 150 0,4
6 8 N500N \leq 500K500K \leq 500 0
7 6 K10,000K \leq 10,000,每个员工负责的范围包含房间 11nn
8 18 K10,000K \leq 10,000,每个员工负责的范围内至少有一个房间只由他负责
9 3 每个员工负责的范围内至少有一个房间只由他负责 8
10 4 K10,000K \leq 10,000,任意 i,ji, jrili=rjljr_i - l_i = r_j - l_j
11 K10,000K \leq 10,000,任意 mim_i 等于 lil_irir_i 1
12 n10,000n \leq 10,000K10,000K \leq 10,000 0,2-6
13 6 K10,000K \leq 10,000 0,1-8,10-12
14 无附加限制 0,1-13