CF1366E Two Arrays

题目描述

给定两个数组 $a_1, a_2, \dots , a_n$ 和 $b_1, b_2, \dots , b_m$。数组 $b$ 已经按升序排列(对于每个 $i$,有 $b_i < b_{i+1}$,$1 \leq i < m$)。 你需要将数组 $a$ 划分为 $m$ 个连续子数组,使得对于每个 $i$($1 \leq i \leq m$),第 $i$ 个子数组的最小值等于 $b_i$。注意,每个元素恰好属于一个子数组,划分方式如下:$a$ 的前若干个元素组成第一个子数组,接下来的若干个元素组成第二个子数组,依此类推。 例如,如果 $a = [12, 10, 20, 20, 25, 30]$,$b = [10, 20, 30]$,那么数组 $a$ 有两种合法的划分方式: 1. $[12, 10, 20], [20, 25], [30]$; 2. $[12, 10], [20, 20, 25], [30]$。 你需要计算将数组 $a$ 划分的方法数。由于答案可能很大,请输出对 $998244353$ 取模后的结果。

输入格式

第一行包含两个整数 $n$ 和 $m$($1 \leq n, m \leq 2 \times 10^5$),分别表示数组 $a$ 和 $b$ 的长度。 第二行包含 $n$ 个整数 $a_1, a_2, \dots , a_n$($1 \leq a_i \leq 10^9$),表示数组 $a$。 第三行包含 $m$ 个整数 $b_1, b_2, \dots , b_m$($1 \leq b_i \leq 10^9; b_i < b_{i+1}$),表示数组 $b$。

输出格式

仅一行,输出将数组 $a$ 划分的方法数,对 $998244353$ 取模。

说明/提示

由 ChatGPT 4.1 翻译