小苯的序列分段
题号:NC291034
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
64bit IO Format: %lld

题目描述

\hspace{15pt}小苯有一个长度为 n排列 a_1,a_2,\dots,a_n,他将 a 划分为 m 个不相交的连续段,每个段内的最大值构成新的序列 b_1,b_2,\dots,b_m
\hspace{15pt}更正式地,将 a 划分为区间
\big\{[l_1,r_1],\,[l_2,r_2],\,\dots,\,[l_m,r_m]\big\},且对任意 1\leqq j<mr_j+1=l_{j+1}。那么,序列 b 的第 i 个元素 b_i 定义为:

b_i=\max\{\,a_{l_i},a_{l_i+1},\dots,a_{r_i}\}

\hspace{15pt}现在,给定 n,m、排列 a 和序列 b,求不同的合法划分方案数。由于答案可能很大,请将答案对 998\,244\,353 取模后输出。若两种划分中存在某个 i,使得 a_i 所属段不同,则认为方案不同。

【名词解释】
\hspace{15pt}长度为 n 的排列:由 1,2,\dots,nn 个整数、按任意顺序组成的数组(每个整数均恰好出现一次)。例如,\{2,3,1,5,4\} 是一个长度为 5 的排列,而 \{1,2,2\}\{1,3,4\} 都不是排列,因为前者存在重复元素,后者包含了超出范围的数。

输入描述:

本题的同一个测试文件中包含多组测试数据。
\hspace{15pt}输入的第一行包含一个正整数 T\ (1 \leq T \leq 100),表示数据组数。
\hspace{15pt}接下来包含 T 组数据,每组数据的格式如下:
\hspace{15pt}第一行两个正整数 n, m\ (1 \leq m \leq n \leq 2 \times 10^5),分别表示排列 a 和序列 b 的长度。
\hspace{15pt}第二行 n 个正整数 a_i\ (1 \leq a_i \leq n),表示排列 a。(保证输入是一个排列。)
\hspace{15pt}第三行 m 个正整数 b_j\ (1 \leq b_j \leq n),表示序列 b。(保证所有的 b_i 互不相同。)
\hspace{15pt}(保证同一个测试文件中的所有测试数据里,n 的总和不超过 2 \times 10^5m 的总和不超过 2 \times 10^5。)

输出描述:

\hspace{15pt}对于每组测试数据,新起一行输出一个整数,表示合法划分方案数对 998\,244\,353 取模后的值。
示例1

输入

复制
2
5 2
1 3 2 5 4
3 5
4 2
1 2 4 3
1 4

输出

复制
2
1

说明

\hspace{15pt}对于第一组测试数据,有 [1,3], [4,5][1,2], [3,5] 两种合法的划分方案。
\hspace{15pt}对于第二组测试数据,只有 [1,1], [2,4] 一种合法的划分方案。