P15064 [UOI 2024 II Stage] Everyone Loves Permutations

题目描述

一个长度为 $n$ 的排列是一个包含 $1$ 到 $n$ 所有整数的数组,且其所有元素两两不同。 Anton 在成长过程中玩过各种数组后,转向研究更有趣的数组——排列。在撰写论文时,他遇到了一个非常困难的问题。 他有一个长度为 $n$ 的排列 $p$ 和一个整数 $k$。他决定构建一个大小为 $(k+1) \times n$ 的二维数组 $a$。 - 对所有 $j$($1 \leq j \leq n$),$a_{0j}=j$; - 对所有 $i$($1 \leq i \leq k$)和 $j$($1 \leq j \leq n$),$a_{ij}=a_{(i-1)p_j}$。 设 $p=[5, 3, 1, 4, 2]$ 且 $k=3$,则我们得到以下数组。 $$ \begin{array}{|c|c|c|c|c|c|} \hline a_{ij} & j=1 & j=2 & j=3 & j=4 & j=5 \\ \hline\hline i=0 & 1 & 2 & 3 & 4 & 5 \\ \hline i=1 & 5 & 3 & 1 & 4 & 2 \\ \hline i=2 & 2 & 1 & 5 & 4 & 3 \\ \hline i=3 & 3 & 5 & 2 & 4 & 1 \\ \hline \end{array} $$ 对于每个 $x$($1 \leq x \leq n$),他想知道所有满足 $a_{ij}=x$ 的 $j$ 之和,其中 $1 \leq i \leq k$。换句话说,他想求 $k$ 个数的和——即 $x$ 在每个 $a_i$ 中的索引。 考虑上一个例子。如果 $x=1$,答案将是 $3+2+5=10$。 经过一番思考和简单思路,Anton 很快解决了这个问题。现在他想看看你是否也能解决它。

输入格式

输入的第一行包含两个整数 $n$、$k$($1 \le n \le 10^6$,$1 \le k \le 10^9$)——分别表示排列的长度和操作重复的次数。 第二行包含排列 $p$($1 \le p_i \le n$)。

输出格式

输出 $n$ 个整数,其中第 $i$ 个数是 $x=i$ 的答案。

说明/提示

- ($8$ 分):$k = 1$; - ($17$ 分):$p_i = i$; - ($26$ 分):$n \le 2000, k \le 2000$; - ($28$ 分):$n \le 2000$,且对任意 $i$ 和 $j$,存在 $k$ 使得 $p[p[p \dots p[i] \dots ]]=j$,其中嵌套进行 $k$ 次; - ($9$ 分):对任意 $i$ 和 $j$,存在 $k$ 使得 $p[p[p \dots p[i] \dots ]]=j$,其中嵌套进行 $k$ 次; - ($12$ 分):无额外限制。 翻译由 DeepSeek V3 完成