#CF2018E2. 复杂线段(困难版)

    ID: 6283 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 1 上传者: 标签>贪心数据结构其他二分查找数学排序并查集并查集*3400

复杂线段(困难版)


E2. 复杂线段(困难版)

每个测试点时间限制:1313
内存限制:256256 兆字节
音乐:Ken Arai - COMPLEX

本题为困难版本。在此版本中,nn 的限制和时间限制均更高。只有当两个版本均通过后,你才能进行 Hack 操作。

一组(闭)线段被称为复杂的,如果它可以被划分为若干个子集,使得:

  • 所有子集的大小相同;
  • 两条线段相交 当且仅当 它们属于同一个子集。

现在给定 nn 条线段 [l1,r1],[l2,r2],,[ln,rn][l_1, r_1], [l_2, r_2], \dots, [l_n, r_n]
请找出这些线段中一个复杂的子集的最大可能大小。

输入格式

每个测试点包含多个测试用例。
第一行包含一个整数 tt1t1031 \le t \le 10^3),表示测试用例的数量。

接下来每个测试用例的描述如下:

  • 第一行包含一个整数 nn1n3×1051 \le n \le 3 \times 10^5),表示线段的数量。
  • 第二行包含 nn 个整数 l1,l2,,lnl_1, l_2, \dots, l_n1li2n1 \le l_i \le 2n),表示线段的左端点。
  • 第三行包含 nn 个整数 r1,r2,,rnr_1, r_2, \dots, r_nliri2nl_i \le r_i \le 2n),表示线段的右端点。

保证所有测试用例的 nn 之和不超过 3×1053 \times 10^5

输出格式

对于每个测试用例,输出一个整数:这些线段中一个复杂的子集的最大可能大小。

样例

输入:

3
3
1 2 3
5 4 6
5
1 2 3 6 8
5 4 7 9 10
5
3 1 4 1 5
7 2 6 5 10

输出:

3
4
4

样例解释

  • 在第一个测试用例中,任意两条线段都相交,因此最优方案是将所有 33 条线段放在同一个组中。
  • 在第二个测试用例中,不存在将全部 55 条线段进行有效划分的方案。一个包含 44 条线段的有效划分是:{[1,5],[2,4]},{[6,9],[8,10]}\{[1,5],[2,4]\},\{[6,9],[8,10]\}
  • 在第三个测试用例中,最优方案是只排除第二条线段,将剩下的 44 条线段放在同一个组中。