P13922 [POCamp 2024] 魔影舞尽处 / Hårgalåten
题目描述
Hårgalåten 是一首瑞典民歌,讲述了魔鬼让一群年轻人跳舞直至死亡的故事。汤姆 喜欢 Hårgalåten,因此为他的管弦乐队编写了一段编曲。为了符合歌词的主题,汤姆以一种特殊的方式编排了这段音乐,使得任何人在错误的地方开始演奏都会永远被困住。
管弦乐队由 $ N $ 名乐手组成,他们围成一圈,其中乐手 1 位于乐手 2 的左侧,乐手 2 位于乐手 3 的左侧,以此类推。请注意,乐手 $ N $ 右侧的乐手是乐手 1。该编曲包含从 1 到 $ M $ 编号的 $ M $ 个小节。最初,有一个整数列表 $ X_1, X_2, \dots, X_N $,其中 $ X_i $ 表示乐手 $ i $ 应该开始演奏的小节。演奏一个小节需要一秒钟,并且所有乐手同时演奏。乐手 $ i $ 演奏完小节 $ X_i $ 后,他们会查看其右侧乐手演奏的小节(即 $ X_{i+1} $)。然后,乐手 $ i $ 演奏小节 $ f(X_{i+1}) $,其中 $ f(1), f(2), \dots, f(M) $ 是一个给定的函数。这个过程会反复进行。
换句话说,如果乐手 $ i $ 在 $ t $ 秒时演奏了小节 $ x $,并且其右侧的乐手在 $ t $ 秒时演奏了小节 $ y $,那么乐手 $ i $ 将在 $ t + 1 $ 秒时演奏小节 $ f(y) $。
当所有乐手都至少演奏过所有小节一次时,歌曲结束。你的任务是确定,对于每个乐手,他们何时至少演奏过歌曲中的所有不同小节一次。有些乐手可能永远无法演奏所有小节,在这种情况下,管弦乐队将不得不无限期地演奏下去。
输入格式
输入的第一行包含整数 $ N $ 和 $ M $($ 1 \le N, M \le 3 \cdot 10^5 $),分别表示乐手数量和小节数量。
第二行包含 $N$ 个整数 $X_1,X_2,\dots ,X_N$,其中 $X_i$ 表示乐手 $i$ 应该开始演奏的小节。
第三行包含 $ M $ 个整数 $ f(1), f(2), \dots, f(M) $ ($ 1 \le f(i) \le M $),这个函数用于确定乐手应该演奏哪个小节。
输出格式
如果某个乐手永远无法演奏所有小节,则输出 $ -1 $。否则,输出 $ N $ 个整数 $ t_1, t_2, \dots, t_N $,其中 $ t_i $ 是乐手 $ i $ 至少演奏过每个小节一次所需的时间(秒数)。
说明/提示
### 子任务
**本题采用捆绑测试。**
| 子任务编号 | 得分 | 限制 |
|:-:|:-:|---|
| $1$ | $10$ | $ N = 1 $ |
| $2$ | $17$ | 对于所有 $ 1 \le i \le M $,$ f(i) = i $。 |
| $3$ | $16$ | $ N, M \le 300 $ |
| $4$ | $22$ | $ N, M \le 3000 $ 且如果 $ i \ne j $ 则 $ f(i) \ne f(j) $。 |
| $5$ | $9 $ | $ N, M \le 3000 $ |
| $6$ | $26$ | 无额外约束。 |