CF1976E.Splittable Permutations

省选/NOI-

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

最初,我们有一个长度为 nn 的数组,这个数组是一个排列(即长度为 nn 的数组,包含 11 到 nn 的每个整数且各出现一次)。

我们进行了 qq 次操作。在第 ii 次操作中,我们进行了如下步骤:

  • 选择当前拥有的任意一个至少包含 22 个元素的数组;
  • 将其拆分为两个非空数组(前缀和后缀);
  • 记录两个整数 lil_i 和 rir_i,其中 lil_i 是拆分后左部分的最大值,rir_i 是右部分的最大值;
  • 将被选择的数组从可用数组池中移除,并将拆分得到的两个部分加入数组池。

例如,假设初始数组为 [6,3,4,1,2,5][6, 3, 4, 1, 2, 5],我们进行了如下操作:

  1. 选择数组 [6,3,4,1,2,5][6, 3, 4, 1, 2, 5],将其拆分为 [6,3][6, 3] 和 [4,1,2,5][4, 1, 2, 5]。此时记录 l1=6l_1 = 6,r1=5r_1 = 5,当前拥有的数组为 [6,3][6, 3] 和 [4,1,2,5][4, 1, 2, 5];
  2. 选择数组 [4,1,2,5][4, 1, 2, 5],将其拆分为 [4,1,2][4, 1, 2] 和 [5][5]。此时记录 l2=4l_2 = 4,r2=5r_2 = 5,当前拥有的数组为 [6,3][6, 3]、[4,1,2][4, 1, 2] 和 [5][5];
  3. 选择数组 [4,1,2][4, 1, 2],将其拆分为 [4][4] 和 [1,2][1, 2]。此时记录 l3=4l_3 = 4,r3=2r_3 = 2,当前拥有的数组为 [6,3][6, 3]、[4][4]、[1,2][1, 2] 和 [5][5]。

给定两个整数 nn 和 qq,以及两个序列 [l1,l2,…,lq][l_1, l_2, \dots, l_q] 和 [r1,r2,…,rq][r_1, r_2, \dots, r_q]。如果存在一种长度为 nn 的排列,能够通过 qq 次操作得到给定的 [l1,l2,…,lq][l_1, l_2, \dots, l_q] 和 [r1,r2,…,rq][r_1, r_2, \dots, r_q],则称该排列是“合法”的。

请计算合法排列的数量。

输入格式

第一行包含两个整数 nn 和 qq(1≤q<n≤3⋅1051 \le q < n \le 3 \cdot 10^5)。

第二行包含 qq 个整数 l1,l2,…,lql_1, l_2, \dots, l_q(1≤li≤n1 \le l_i \le n)。

第三行包含 qq 个整数 r1,r2,…,rqr_1, r_2, \dots, r_q(1≤ri≤n1 \le r_i \le n)。

输入保证:至少存在一个排列可以得到给定的 [l1,l2,…,lq][l_1, l_2, \dots, l_q] 和 [r1,r2,…,rq][r_1, r_2, \dots, r_q]。

输出格式

输出一个整数,表示合法排列的数量,对 998244353998244353 取模。

输入输出样例

  • 输入#1

    6 3
    6 4 4
    5 5 2

    输出#1

    30
  • 输入#2

    10 1
    10
    9

    输出#2

    1814400
  • 输入#3

    4 1
    2
    4

    输出#3

    8

说明/提示

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页