CF1976E Splittable Permutations
题目描述
最初,我们有一个长度为 $n$ 的数组,这个数组是一个排列(即长度为 $n$ 的数组,包含 $1$ 到 $n$ 的每个整数且各出现一次)。
我们进行了 $q$ 次操作。在第 $i$ 次操作中,我们进行了如下步骤:
- 选择当前拥有的任意一个至少包含 $2$ 个元素的数组;
- 将其拆分为两个非空数组(前缀和后缀);
- 记录两个整数 $l_i$ 和 $r_i$,其中 $l_i$ 是拆分后左部分的最大值,$r_i$ 是右部分的最大值;
- 将被选择的数组从可用数组池中移除,并将拆分得到的两个部分加入数组池。
例如,假设初始数组为 $[6, 3, 4, 1, 2, 5]$,我们进行了如下操作:
1. 选择数组 $[6, 3, 4, 1, 2, 5]$,将其拆分为 $[6, 3]$ 和 $[4, 1, 2, 5]$。此时记录 $l_1 = 6$,$r_1 = 5$,当前拥有的数组为 $[6, 3]$ 和 $[4, 1, 2, 5]$;
2. 选择数组 $[4, 1, 2, 5]$,将其拆分为 $[4, 1, 2]$ 和 $[5]$。此时记录 $l_2 = 4$,$r_2 = 5$,当前拥有的数组为 $[6, 3]$、$[4, 1, 2]$ 和 $[5]$;
3. 选择数组 $[4, 1, 2]$,将其拆分为 $[4]$ 和 $[1, 2]$。此时记录 $l_3 = 4$,$r_3 = 2$,当前拥有的数组为 $[6, 3]$、$[4]$、$[1, 2]$ 和 $[5]$。
给定两个整数 $n$ 和 $q$,以及两个序列 $[l_1, l_2, \dots, l_q]$ 和 $[r_1, r_2, \dots, r_q]$。如果存在一种长度为 $n$ 的排列,能够通过 $q$ 次操作得到给定的 $[l_1, l_2, \dots, l_q]$ 和 $[r_1, r_2, \dots, r_q]$,则称该排列是“合法”的。
请计算合法排列的数量。
输入格式
第一行包含两个整数 $n$ 和 $q$($1 \le q < n \le 3 \cdot 10^5$)。
第二行包含 $q$ 个整数 $l_1, l_2, \dots, l_q$($1 \le l_i \le n$)。
第三行包含 $q$ 个整数 $r_1, r_2, \dots, r_q$($1 \le r_i \le n$)。
输入保证:至少存在一个排列可以得到给定的 $[l_1, l_2, \dots, l_q]$ 和 $[r_1, r_2, \dots, r_q]$。
输出格式
输出一个整数,表示合法排列的数量,对 $998244353$ 取模。
说明/提示
由 ChatGPT 4.1 翻译