读写要求
本题采用文件读写,请在提交代码时使用正确的文件读写方式,否则会导致 RE
输入:array.in
输出:array.out
题目描述
给定两个数组 a1,a2,…,an 和 b1,b2,…,bm。数组 b 已经按升序排列(对于每个 i,有 bi<bi+1,1≤i<m)。
你需要将数组 a 划分为 m 个连续子数组,使得对于每个 i(1≤i≤m),第 i 个子数组的最小值等于 bi。注意,每个元素恰好属于一个子数组,划分方式如下:a 的前若干个元素组成第一个子数组,接下来的若干个元素组成第二个子数组,依此类推。
例如,如果 a=[12,10,20,20,25,30],b=[10,20,30],那么数组 a 有两种合法的划分方式:
- [12,10,20],[20,25],[30];
- [12,10],[20,20,25],[30]。
你需要计算将数组 a 划分的方法数。由于答案可能很大,请输出对 998244353 取模后的结果。
输入格式
第一行包含两个整数 n 和 m(1≤n,m≤2×105),分别表示数组 a 和 b 的长度。
第二行包含 n 个整数 a1,a2,…,an(1≤ai≤109),表示数组 a。
第三行包含 m 个整数 b1,b2,…,bm(1≤bi≤109;bi<bi+1),表示数组 b。
输出格式
仅一行,输出将数组 a 划分的方法数,对 998244353 取模。
输入输出样例
6 3
12 10 20 20 25 30
10 20 30
2
4 2
1 3 3 7
3 7
0
8 2
1 2 2 2 2 2 2 2
1 2
7