loj#P4810. 「RMI 2024」Jump Civilization

「RMI 2024」Jump Civilization

题目描述

题目译自 Romanian Master of Informatics 2024 Day2 T3 「Jump Civilization

「Here in Parkour Jump Civilization, No One Chooses to Jump for the Beef」—— Evbo -《跑酷文明》电影

在跑酷文明的世界里,有 NN 个漂浮的岛屿,编号从 11NN。当你站在岛屿 ii (1i<N)(1 \leq i < N) 上,你可以选择:

  • 简单跳跃:从岛屿 ii 跳到旁边的岛屿 i+1i + 1
  • 困难跳跃:从岛屿 ii 跳到岛屿 viv_i,其中 i<viNi < v_i \leq N

为了在跑酷文明中提升等级,你需要计算每个岛屿的跳跃能力。岛屿 ii 的跳跃能力是指从岛屿 ii 开始,最多使用 KK 次跳跃能够到达的岛屿数量。

上一任跳跃冠军为了确保跳跃路线的公平性,设定了一条重要规则:对于任意 1i<jN1 \leq i < j \leq N,要么 vijv_i \leq j,要么 vjviv_j \leq v_i

作为跑酷文明的一员新手,你希望高效地算出每个岛屿的跳跃能力——你能做到吗?

输入格式

输入的第一行包含两个空格分隔的整数 NNKK

第二行包含 N1N - 1 个空格分隔的整数 v1,,vN1v_1, \dots, v_{N-1},表示每个岛屿的困难跳跃目标。

输出格式

输出一行,包含 NN 个空格分隔的整数,按顺序表示每个岛屿的跳跃能力。

5 1
4 3 4 5

3 2 2 2 1

从岛屿 11 开始:

  • 不跳跃,可以到达岛屿 11
  • 跳跃一次,可以到达岛屿 22(简单跳跃)或岛屿 44(困难跳跃)。

总共能到达 33 个岛屿,因此岛屿 11 的跳跃能力是 33

6 2
2 3 5 5 6

3 4 4 3 2 1

数据范围与提示

对于所有输入数据,满足:

  • 1N300 0001 \leq N \leq 300 \ 000
  • 1KN11 \leq K \leq N - 1
  • i<viNi < v_i \leq N
  • 对于 1i<jN1 \leq i < j \leq N,满足 vijv_i \leq jvjviv_j \leq v_i
  • 如果从岛屿 ii 出发,通过两种不同路径在最多 KK 次跳跃内都能到达岛屿 jj,在计算岛屿 ii 的跳跃能力时,岛屿 jj 只计数一次。
  • 计算跳跃能力时,跳跃类型(简单或困难)不重要,只看跳跃次数。

详细子任务附加限制及分值如下表所示。

子任务 分值 附加限制
11 66 N2 000N \leq 2 \ 000
22 2727 N100 000N \leq 100 \ 000K50K \leq 50
33 1111 对于 1i<N1 \leq i < Nvii+2v_i \leq i + 2
44 3737 N100 000N \leq 100 \ 000
55 1919 无附加限制