CF2035G2 Go Learn! (Hard Version)
题目描述
本题的简单版与困难版的区别在于 $n$ 和 $n$ 的总和的限制。在本题中,$n \leq 3 \cdot 10^5$,且所有 $n$ 的总和不超过 $10^6$。只有在两种版本都通过后才能进行 hack。
让我们看看 Bessie 是如何管理她的财务的。她似乎陷入了困境!幸运的是,她正在申请 Moogle 的工作来解决这个问题。Moogle 的面试需要对冷门算法和复杂数据结构有深入了解,但 Bessie 从一位 LGM 那里得到了确切的学习建议。
Bessie 写了如下代码,试图在一个可能无序的数组 $[a_1, a_2, \ldots, a_n]$ 中用二分查找某个元素 $k$:
```
let l = 1
let h = n
while l < h:
let m = floor((l + h) / 2)
if a[m] < k:
l = m + 1
else:
h = m
return l
```
Bessie 将她的代码提交给 Farmer John 的问题,并有 $m$($1 \leq m \leq n$)组测试。第 $i$ 组测试为 $(x_i, k_i)$($1 \leq x, k \leq n$)。保证所有 $x_i$ 互不相同,所有 $k_i$ 互不相同。
第 $i$ 组测试是正确的,当且仅当满足以下条件:
1. 数组的第 $x_i$ 个元素为 $k_i$。
2. 如果 Bessie 按上述代码对 $k_i$ 进行二分查找,返回值为 $x_i$。
可能无法让所有 $m$ 组测试在同一个数组上都正确,因此 Farmer John 会移除其中一些测试,使 Bessie 能够 AC。设 $r$ 为需要移除的最少测试数,使得存在一个数组 $[a_1, a_2, \ldots, a_n]$,$1 \leq a_i \leq n$,使得剩下的所有测试都正确。
除了求 $r$,Farmer John 还希望你统计有多少个数组 $[a_1, a_2, \ldots, a_n]$,$1 \leq a_i \leq n$,存在一种移除恰好 $r$ 个测试的方法,使得剩下的测试都正确。由于答案可能很大,请输出对 $998\,244\,353$ 取模的结果。
输入格式
第一行包含一个整数 $t$($1 \leq t \leq 10^4$),表示测试用例数。
每个测试用例的第一行包含两个整数 $n$ 和 $m$($1 \leq m \leq n \leq 3 \cdot 10^5$),表示数组长度和测试数。
接下来的 $m$ 行,每行包含两个整数,描述一组测试。第 $i$ 行为 $x_i$ 和 $k_i$($1 \leq x_i, k_i \leq n$),表示测试的下标和值。保证所有 $x_i$ 互不相同,所有 $k_i$ 互不相同。
保证所有测试用例中 $n$ 的总和不超过 $10^6$。
输出格式
对于每个测试用例,输出两个整数 $r$——需要移除的最少测试数,使得存在一个数组能让剩下的测试都正确,以及满足可以移除恰好 $r$ 个测试后剩下的测试都正确的数组个数,对 $998\,244\,353$ 取模。
说明/提示
请参考第一个样例。
在第一个测试用例中,数组 $[1,2,2,3,4]$ 能满足所有 $m$ 个测试,因此 Bessie 需要移除的测试数最少为 $0$。注意,这也是唯一能满足所有 $m$ 个测试的数组。
在第二个测试用例中,最少需要移除 $1$ 个测试。Bessie 唯一可以移除的测试是 $(2,5)$。如果移除测试 $(2,5)$,则能满足剩下 $m-1$ 个测试的数组有 $[2,2,3,1,4]$、$[2,2,3,2,4]$、$[2,2,3,3,4]$。
由 ChatGPT 4.1 翻译