QOJ.ac

QOJ

時間限制: 1 s 記憶體限制: 512 MB 總分: 100

#10140. 跳跃文明

统计

在跳跃文明中,世界由 $N$ 个浮岛组成,编号为 $1$ 到 $N$。当位于岛屿 $i$(对于 $1 \le i < N$)时,跳跃文明的成员可以选择:

  • 简单跳跃:从岛屿 $i$ 跳到岛屿 $i+1$;或者
  • 困难跳跃:从岛屿 $i$ 跳到岛屿 $v_i$,其中 $i < v_i \le N$。

为了在跳跃文明中晋升,成员们需要计算每个岛屿的“跳跃力”。岛屿 $i$ 的跳跃力是指从岛屿 $i$ 出发,使用最多 $K$ 次跳跃所能到达的岛屿数量。

上一任跳跃冠军为了确保跳跃课程的公平性,制定了以下重要规则:“对于任意 $1 \le i < j \le N$,要么 $v_i \le v_j$,要么 $v_j \le v_i$。”

作为一名有抱负的跳跃文明成员,你想要找出每个岛屿的跳跃力——你能高效地完成这项任务吗?

输入格式

输入的第一行包含两个空格分隔的整数 $N, K$。输入的第二行包含 $N-1$ 个空格分隔的整数 $v_1, \dots, v_{N-1}$。

输出格式

输出 $N$ 个空格分隔的整数,依次表示各岛屿的跳跃力。

数据范围

  • $1 \le N \le 300\,000$
  • $1 \le K \le N - 1$
  • $i < v_i \le N$
  • 对于 $1 \le i < j \le N$,要么 $v_i \le v_j$,要么 $v_j \le v_i$。
  • 如果岛屿 $j$ 可以通过两种不同的方式从岛屿 $i$ 在最多 $K$ 次跳跃内到达,则该岛屿在计算岛屿 $i$ 的跳跃力时仅计数一次。
  • 在计算岛屿的跳跃力时,使用简单跳跃还是困难跳跃并不重要——只有跳跃次数很重要。

子任务

# 分值 数据范围
1 6 $N \le 2\,000$
2 27 $N \le 100\,000$ 且 $K \le 50$
3 11 $v_i \le i + 2$ 对于 $1 \le i < N$
4 37 $N \le 100\,000$
5 19 无附加限制

样例

样例输入 1

5 1
4 3 4 5

样例输出 1

3 2 2 2 1

说明 1

从岛屿 1 出发,无需跳跃即可到达岛屿 1,通过 1 次跳跃可到达岛屿 2 和 4。总计,岛屿 1 的跳跃力为 3。

样例输入 2

6 2
2 3 5 5 6

样例输出 2

3 4 4 3 2 1

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.