Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int maxn = 1e6 + 100;
- int dp[maxn], n, k, a[maxn], l[maxn], r[maxn], o[maxn];
- int main() {
- cin >> n >> k;
- for (int i = 0; i < n; ++i) cin >> a[i];
- dp[0] = min(0, k) + min(n - 0 - 1, k) + 1;
- for (int i = 1; i < n; ++i)
- if (a[i] == 0)
- dp[i] = min(i, k) + min(n - i - 1, k) + 1;
- else {
- l[i] = min(k, max(i - (a[i] - 1 + k) - 1, 0));
- r[i] = min(n - i - 1, k);
- o[i] = (a[i] - 1 + k < i);
- dp[i] = dp[a[i] - 1] + l[i] + o[i] + r[i];
- }
- for (int i = 0; i < n; ++i) cout << dp[i] << " ";
- cout << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement