题意:数组a(所有数不同 )中选中ai删除,然后将或
插入到数组b末尾,问一种有多少种可能
分别计算两边的数能删除的个数设为
,而每次删除一个数不会改变之后的数的
大小,所以直接相乘就是结果
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod = 998244353;
ll t;
ll n, k;
ll a[200007];
ll b[200007];
ll pos[200007];
int main() {
scanf("%lld", &t);
while (t--) {
ll ans = 1;
scanf("%lld%lld", &n, &k);
a[0] = a[n + 1] = INT_MAX;
for (int i = 1; i <= n; i++) {
ll x;
scanf("%lld", &x);
pos[x] = i;
a[i] = 0;
}
for (int i = 1; i <= k; i++) {
scanf("%lld", &b[i]);
a[pos[b[i]]] = i;
}
for (int i = 1; i <= k; i++)
ans = ans * ((a[pos[b[i]] - 1] < a[pos[b[i]]]) + (a[pos[b[i]] + 1] < a[pos[b[i]]])) % mod;
printf("%lld\n", ans);
}
return 0;
}