A16574 | Nested Segments
时间限制1s
内存限制256MB
通过 / 提交0/0
题目描述
如果 $1\le l\le r\le n$ 且 $A$ 中任何一对不同的线段 $[l_i, r_i], [l_j, r_j]$ 都恰好满足以下条件之一,那么由具有整数端点的成对不同线段 $[l, r]$ 组成的集合 $A$ 是好的:
- $r_i < l_j$ 或 $r_j < l_i$ (线段不相交)
- $l_i \le l_j \le r_j \le r_i$ 或 $l_j \le l_i \le r_i \le r_j$ (一条线段完全包含在另一条线段中)
给你一个由 $m$ 对不同的线段 $[l_i, r_i]$ 组成的好的集合 $S$。您希望在确保集合 $S$ 是好的的前提下,尽可能多地向集合 $S$ 添加线段。
由于这项任务过于简单,因此您需要确定有多少种不同的方法可以在确保集合 $S$ 是好的的情况下,向 $S$ 添加最大数量的额外线段。如果在其中一种方法中增加了一条线段,而在另一种方法中没有增加,那么这两种方法就被认为是不同的。
形式化的,我们需要找出由不同的线段组成的好的的集合 $T$ 的个数,使得 $S$ 是 $T$ 的子集,且 $T$ 的大小最大。由于结果可能很大,请计算答案对 $998\,244\,353$ 取模后的结果。
- $r_i < l_j$ 或 $r_j < l_i$ (线段不相交)
- $l_i \le l_j \le r_j \le r_i$ 或 $l_j \le l_i \le r_i \le r_j$ (一条线段完全包含在另一条线段中)
给你一个由 $m$ 对不同的线段 $[l_i, r_i]$ 组成的好的集合 $S$。您希望在确保集合 $S$ 是好的的前提下,尽可能多地向集合 $S$ 添加线段。
由于这项任务过于简单,因此您需要确定有多少种不同的方法可以在确保集合 $S$ 是好的的情况下,向 $S$ 添加最大数量的额外线段。如果在其中一种方法中增加了一条线段,而在另一种方法中没有增加,那么这两种方法就被认为是不同的。
形式化的,我们需要找出由不同的线段组成的好的的集合 $T$ 的个数,使得 $S$ 是 $T$ 的子集,且 $T$ 的大小最大。由于结果可能很大,请计算答案对 $998\,244\,353$ 取模后的结果。
输入格式
每个测试包含多个测试用例。第一行包含测试用例的数量 $t$( $1 \le t \le 10^4$ )。测试用例说明如下。
每个测试用例的第一行包含两个整数 $n$ 和 $m$($1 \le n \le 2 \times 10^5$,$0 \le m \le 2 \times 10^5$)—线段的最大右端点和 $S$ 的大小。
接下来 $m$ 行的 $i$\-th 包含两个整数 $l_i$ 和 $r_i$($1 \le l_i \le r_i \le n$)—即集合 $S$ 中的线段边界。
保证给定的集合 $S$ 是好的,并且集合 $S$ 中的线段是成对不同的。
保证所有测试用例中 $n$ 和 $m$ 的总和不超过 $2 \times 10^5$。
每个测试用例的第一行包含两个整数 $n$ 和 $m$($1 \le n \le 2 \times 10^5$,$0 \le m \le 2 \times 10^5$)—线段的最大右端点和 $S$ 的大小。
接下来 $m$ 行的 $i$\-th 包含两个整数 $l_i$ 和 $r_i$($1 \le l_i \le r_i \le n$)—即集合 $S$ 中的线段边界。
保证给定的集合 $S$ 是好的,并且集合 $S$ 中的线段是成对不同的。
保证所有测试用例中 $n$ 和 $m$ 的总和不超过 $2 \times 10^5$。
输出格式
对于每个测试用例,输出一个整数,表示在确保集合 $S$ 是好的的情况下,在集合 $S$ 中添加最大数量的额外线段的不同方式的数量,模数为 $998\,244\,353$ 。
输入输出样例
输入 #1
6 1 0 2 3 1 1 2 2 1 2 5 2 1 3 2 3 4 1 1 1 6 2 1 3 4 6 2300 0
输出 #1
1 1 2 5 4 187997613
在第一个例子中,唯一可能的线段是 $[1, 1]$ ,因此 $T = \{[1, 1]\}$ 的大小最大,也是唯一的解。
在第二个示例中,无法向集合 $S$ 添加任何额外的线段。因此,向 $S$ 添加线段的唯一方法就是不添加任何线段。
在第三个例子中,在确保集合 $S$ 仍然良好的情况下,可以向 $S$ 添加 $7$ 条额外的线段。我们可以证明,在 $S$ 中添加超过 $7$ 条线段是不可能的。恰好有 $2$ 种不同的方法可以将这些 $7$ 条线段添加到 $S$ 中,它们各自的集合 $T$ 如下所示:
- $\{[1, 1], [1, 3], [1, 4], [1, 5], [2, 2], [2, 3], [3, 3], [4, 4], [5, 5]\}$
- $\{[1, 1], [1, 3], [1, 5], [2, 2], [2, 3], [3, 3], [4, 4], [4, 5], [5, 5]\}$ .
在第四个例子中,正好有 $5$ 种不同的方法可以将最多 $6$ 条额外的线段添加到 $S$ 中,它们各自的集合 $T$ 如下所示:
- $\{[1, 1], [1, 2], [1, 3], [1, 4], [2, 2], [3, 3], [4, 4]\}$
- $\{[1, 1], [1, 2], [1, 4], [2, 2], [3, 3], [3, 4], [4, 4]\}$
- $\{[1, 1], [1, 3], [1, 4], [2, 2], [2, 3], [3, 3], [4, 4]\}$
- $\{[1, 1], [1, 4], [2, 2], [2, 3], [2, 4], [3, 3], [4, 4]\}$
- $\{[1, 1], [1, 4], [2, 2], [2, 4], [3, 3], [3, 4], [4, 4]\}$
在第二个示例中,无法向集合 $S$ 添加任何额外的线段。因此,向 $S$ 添加线段的唯一方法就是不添加任何线段。
在第三个例子中,在确保集合 $S$ 仍然良好的情况下,可以向 $S$ 添加 $7$ 条额外的线段。我们可以证明,在 $S$ 中添加超过 $7$ 条线段是不可能的。恰好有 $2$ 种不同的方法可以将这些 $7$ 条线段添加到 $S$ 中,它们各自的集合 $T$ 如下所示:
- $\{[1, 1], [1, 3], [1, 4], [1, 5], [2, 2], [2, 3], [3, 3], [4, 4], [5, 5]\}$
- $\{[1, 1], [1, 3], [1, 5], [2, 2], [2, 3], [3, 3], [4, 4], [4, 5], [5, 5]\}$ .
在第四个例子中,正好有 $5$ 种不同的方法可以将最多 $6$ 条额外的线段添加到 $S$ 中,它们各自的集合 $T$ 如下所示:
- $\{[1, 1], [1, 2], [1, 3], [1, 4], [2, 2], [3, 3], [4, 4]\}$
- $\{[1, 1], [1, 2], [1, 4], [2, 2], [3, 3], [3, 4], [4, 4]\}$
- $\{[1, 1], [1, 3], [1, 4], [2, 2], [2, 3], [3, 3], [4, 4]\}$
- $\{[1, 1], [1, 4], [2, 2], [2, 3], [2, 4], [3, 3], [4, 4]\}$
- $\{[1, 1], [1, 4], [2, 2], [2, 4], [3, 3], [3, 4], [4, 4]\}$
C++ 编辑器
输入
输出
可保存默认模板;新题优先使用已保存模板。
当前快捷键仅展示,暂不支持修改。
- 撤销
Ctrl / ⌘ + Z - 重做
Ctrl / ⌘ + Y - 查找
Ctrl / ⌘ + F - 全选
Ctrl / ⌘ + A - 复制
Ctrl / ⌘ + C - 剪切
Ctrl / ⌘ + X - 粘贴
Ctrl / ⌘ + V - 自动排版
工具栏排版按钮 - 草稿保存
编辑时自动保存到本机
历史
提交记录
状态说明时间源码
AI
作答助手
你好,我是作答助手。可以问思路、复杂度、样例含义或代码报错原因;不会直接给出完整 AC 代码。
确定要清空代码吗?