A119994.固定前缀排列

普及+/提高

通过率:0%

时间限制:1.00s

内存限制:128MB

题目描述

给定 nn 个长度为 mm 的排列 a1,a2,,ana_1,a_2,\dots,a_n

长度为 mm 的排列,指的是由 11mmmm 个整数各出现一次组成的序列。

对于一个排列 p1,p2,,pmp_1,p_2,\dots,p_m,定义它的“固定前缀长度”为最大的整数 kk,满足:

p1=1,p2=2,,pk=kp_1=1,p_2=2,\dots,p_k=k

如果 p11p_1\ne 1,那么它的固定前缀长度为 00

两个排列 ppqq 的乘积 pqp\cdot q 定义为一个新排列 rr,其中:

rj=qpjr_j=q_{p_j}

也就是说,第 jj 个位置的值等于 qq 中第 pjp_j 个位置上的数。

现在,对于每个 ii,你需要在所有 aj(1jn)a_j(1\le j\le n) 中选择一个排列,使得 aiaja_i\cdot a_j 的固定前缀长度尽可能大,并输出这个最大值。

注意:可以选择 j=ij=i

输入格式

第一行输入一个整数 TT,表示测试数据组数。

对于每组测试数据:

第一行输入两个整数 n,mn,m,表示排列个数和每个排列的长度。

接下来 nn 行,每行输入 mm 个整数,表示一个长度为 mm 的排列。

输出格式

对于每组测试数据,输出一行 nn 个整数。

ii 个整数表示:在所有 jj 中,aiaja_i\cdot a_j 的固定前缀长度最大是多少。

输入输出样例

  • 输入#1

    3
    3 4
    2 4 1 3
    1 2 4 3
    2 1 3 4
    2 2
    1 2
    2 1
    8 10
    3 4 9 6 10 2 7 8 1 5
    3 9 1 8 5 7 4 10 2 6
    3 10 1 7 5 9 6 4 2 8
    1 2 3 4 8 6 10 7 9 5
    1 2 3 4 10 6 8 5 7 9
    9 6 1 2 10 4 7 8 3 5
    7 9 3 2 5 6 4 8 1 10
    9 4 3 7 5 6 1 10 8 2

    输出#1

    1 4 4
    2 2
    10 8 1 6 8 10 1 7

说明/提示

对于所有测试数据,满足:

  • 1T1041\le T\le 10^4
  • 1n5×1041\le n\le 5\times 10^4
  • 1m101\le m\le 10
  • 每个 aia_i 都是一个长度为 mm 的排列
  • 所有测试数据中 nn 的总和不超过 5×1045\times 10^4

样例解释

对于第一组测试数据,三个排列分别为:

a1=[2,4,1,3]a_1=[2,4,1,3]

a2=[1,2,4,3]a_2=[1,2,4,3]

a3=[2,1,3,4]a_3=[2,1,3,4]

先看 a1a_1

如果选择 a3a_3,那么:

a1a3=[1,4,2,3]a_1\cdot a_3=[1,4,2,3]

这个排列的第 11 个位置是 11,但是第 22 个位置不是 22,所以固定前缀长度为 11

尝试所有 aja_j 后,a1aja_1\cdot a_j 的最大固定前缀长度为 11

再看 a2a_2

如果选择 a2a_2,那么:

a2a2=[1,2,3,4]a_2\cdot a_2=[1,2,3,4]

这个排列的前 44 个位置都满足:

p1=1,p2=2,p3=3,p4=4p_1=1,p_2=2,p_3=3,p_4=4

所以固定前缀长度为 44

再看 a3a_3

如果选择 a3a_3,那么:

a3a3=[1,2,3,4]a_3\cdot a_3=[1,2,3,4]

所以最大固定前缀长度也是 44

因此第一组测试数据的答案为:

1 4 4

对于第二组测试数据,两个排列分别为:

[1,2][1,2]

[2,1][2,1]

它们都可以通过选择合适的排列,使乘积结果变成:

[1,2][1,2]

所以答案为:

2 2
首页