题目描述
有 n 个岛,编号 1∼n。给定长度为 (n−1) 的正整数数列 v1,v2,…,vn−1。
当你在岛 i(1≤i<n)上时,可以跳到岛 (i+1) 上或者岛 vi 上。这里,i<vi。
给定正整数 k。对于岛 i,定义 f(i,k) 表示从它出发跳至多 k 步能够跳到的岛有多少个(包括自身)。
此外,vi 还满足特殊性质:对于任意 1≤i<j<n,要么 vi≤j,要么 vj≤vi。
对于 i=1,2,…,n,求出 f(i,k)。
补充说明:即使岛 i 有多种在 k 步内跳到岛 j 的方式,岛 j 也只算一次。
输入格式
第一行,两个正整数 n,k。
第二行,(n−1) 个正整数 v1,v2,…,vn−1。
输出格式
输出一行 n 个正整数,第 i 个数表示 f(i,k)。
提示
样例解释
- 样例 1 解释:以岛 1 为例,跳 0 步可以到达岛 1,跳 1 步可以到达岛 {2,4}。所以 f(1,1)=3。
数据范围
对于 100% 的数据,保证:
- 1≤n≤3×105;
- 1≤k<n;
- i<vi≤n;
- 对于任意 1≤i<j<n,要么 vi≤j,要么 vj≤vi。
子任务 |
n≤ |
特殊性质 |
得分 |
1 |
2000 |
|
6 |
2 |
105 |
A |
27 |
3 |
3×105 |
B |
11 |
4 |
105 |
|
37 |
5 |
3×105 |
19 |
- 特殊性质 A:k≤50。
- 特殊性质 B:vi≤i+2。