D. 又一个逆序对问题
每次测试时间限制:2 秒
每次测试内存限制:256 兆字节
给你一个由 1 到 2n−1 之间的奇数构成的排列 p0,p1,…,pn−1,以及一个由 0 到 k−1 之间的整数构成的排列 q0,q1,…,qk−1。
定义长度为 nk 的数组 a0,a1,…,ank−1 如下:
对于所有 0≤i<n 和所有 0≤j<k,有 ai⋅k+j=pi⋅2qj。
例如,如果 p=[3,5,1] 且 q=[0,1],那么 a=[3,6,5,10,1,2]。
注意,题目中所有数组都是从 0 开始索引的。注意,数组 a 的每个元素都是唯一确定的。
求数组 a 中的逆序对数量。由于这个数字可能非常大,你只需要输出它对 998244353 取模的结果。
数组 a 中的一个逆序对是指一对 (i,j)(0≤i<j<nk)满足 ai>aj。
输入
第一行包含一个整数 t(1≤t≤104)——测试用例的数量。
每个测试用例的第一行包含两个整数 n 和 k(1≤n,k≤2⋅105)——数组 p 和 q 的长度。
每个测试用例的第二行包含 n 个不同的整数 p0,p1,…,pn−1(1≤pi≤2n−1,pi 是奇数)——数组 p。
每个测试用例的第三行包含 k 个不同的整数 q0,q1,…,qk−1(0≤qi<k)——数组 q。
保证所有测试用例的 n 之和不超过 2⋅105,且所有测试用例的 k 之和不超过 2⋅105。
输出
对于每个测试用例,输出一行一个整数:数组 a 中逆序对的数量模 998244353。
示例
输入
4
3 2
3 5 1
0 1
3 4
1 3 5
3 2 0 1
1 5
1
0 1 2 3 4
8 3
5 1 7 11 15 3 9 13
2 0 1
输出
9
25
0
104
注释
在第一个测试用例中,数组 a 等于 [3,6,5,10,1,2]。其中有 9 个逆序对:(0,4),(0,5),(1,2),(1,4),(1,5),(2,4),(2,5),(3,4),(3,5)。注意这些是 (i,j) 对,满足 i<j 且 ai>aj。
在第二个测试用例中,数组 a 等于 [8,4,1,2,24,12,3,6,40,20,5,10]。其中有 25 个逆序对。
在第三个测试用例中,数组 a 等于 [1,2,4,8,16]。其中没有逆序对。