A93500.另一个逆序对问题

提高+/省选-

官方

通过率:0%

时间限制:1.00s

内存限制:128MB

题目描述

给定一个长度为 nn 的排列 p0,p1,,pn1p_0,p_1,\ldots,p_{n-1},其中 pp112n12n-1 之间所有奇数的一个排列;以及一个长度为 kk 的排列 q0,q1,,qk1q_0,q_1,\ldots,q_{k-1},其中 qq00k1k-1 的一个排列。

定义长度为 nknk 的数组 a0,a1,,ank1a_0,a_1,\ldots,a_{nk-1} 为:

对所有 0i<n0\le i<n0j<k0\le j<k
aik+j=pi2qja_{i\cdot k+j}=p_i\cdot 2^{q_j}

例如,若 p=[3,5,1]p=[3,5,1]q=[0,1]q=[0,1],则
a=[3,6,5,10,1,2]a=[3,6,5,10,1,2]

注意:所有数组都从 00 开始编号,并且数组 aa 的每个元素都是唯一的。

请你计算数组 aa 中的逆序对数量,对 998244353998244353 取模输出。

逆序对定义为一对下标 (i,j)(i,j),满足 0i<j<nk0\le i<j<nkai>aja_i>a_j

输入格式

第一行一个整数 tt1t1041\le t\le 10^4),表示测试用例数量。

每个测试用例:

  • 第一行两个整数 n,kn,k1n,k21051\le n,k\le 2\cdot 10^5
  • 第二行 nn 个两两不同的奇数 p0,,pn1p_0,\ldots,p_{n-1}1pi2n11\le p_i\le 2n-1),且 pp 是所有奇数的一个排列
  • 第三行 kk 个两两不同的整数 q0,,qk1q_0,\ldots,q_{k-1}0qi<k0\le q_i<k),且 qq0k10\sim k-1 的一个排列

保证所有测试用例中 nn 的总和不超过 21052\cdot 10^5kk 的总和不超过 21052\cdot 10^5

输出格式

对每个测试用例输出一行:数组 aa 的逆序对数量对 998244353998244353 取模的结果。

输入输出样例

  • 输入#1

    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

    输出#1

    9
    25
    0
    104

说明/提示

样例解释

样例 1

输入里:
p=[3,5,1]p=[3,5,1]q=[0,1]q=[0,1],所以 2q=[20,21]=[1,2]2^{q}=[2^0,2^1]=[1,2]

按定义 aik+j=pi2qja_{i\cdot k+j}=p_i\cdot 2^{q_j}(这里 k=2k=2):

  • i=0i=0:得到 [31,32]=[3,6][3\cdot1,\,3\cdot2]=[3,6]
  • i=1i=1:得到 [51,52]=[5,10][5\cdot1,\,5\cdot2]=[5,10]
  • i=2i=2:得到 [11,12]=[1,2][1\cdot1,\,1\cdot2]=[1,2]

所以 a=[3,6,5,10,1,2]a=[3,6,5,10,1,2]
逆序对就是找所有 (i,j)(i,j)i<ji<j)且 ai>aja_i>a_j 的对,数一数共有 99 个,所以输出 99

样例 2

题目给出的第二组数据生成的数组是:
a=[8,4,1,2,24,12,3,6,40,20,5,10]a=[8,4,1,2,24,12,3,6,40,20,5,10]
其中逆序对个数为 2525,所以输出 2525

样例 3

第三组数据里 p=[1]p=[1]q=[0,1,2,3,4]q=[0,1,2,3,4],得到:
a=[1,2,4,8,16]a=[1,2,4,8,16],它是从小到大不下降的,因此没有逆序对,输出 00

首页