Advertisement
Guest User

Untitled

a guest
Feb 24th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.68 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. const int maxn = 1e6 + 100;
  6.  
  7. int dp[maxn], n, k, a[maxn], l[maxn], r[maxn], o[maxn];
  8.  
  9. int main() {
  10.  
  11.     cin >> n >> k;
  12.     for (int i = 0; i < n; ++i) cin >> a[i];
  13.     dp[0] = min(0, k) + min(n - 0 - 1, k) + 1;
  14.     for (int i = 1; i < n; ++i)
  15.         if (a[i] == 0)
  16.             dp[i] = min(i, k) + min(n - i - 1, k) + 1;
  17.         else {
  18.             l[i] = min(k, max(i - (a[i] - 1 + k) - 1, 0));
  19.             r[i] = min(n - i - 1, k);
  20.             o[i] = (a[i] - 1 + k < i);
  21.             dp[i] = dp[a[i] - 1] + l[i] + o[i] + r[i];
  22.         }
  23.     for (int i = 0; i < n; ++i) cout << dp[i] << " ";
  24.     cout << endl;
  25.  
  26.     return 0;
  27. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement