题解:CF928B Chat

· · 题解

对于数列 a_{1},a_{2}…a_{n} ,对于每个 a_{i}

对于不同的情况,我们只要分开判断就行了。

代码

#include <bits/stdc++.h>
using namespace std;
int a[100005];
int main() {
    int n, k;
    cin >> n >> k;
    for (int i = 1; i <= n; i++) {
        int m;
        cin >> m;
        if (m == 0) {
            a[i] = min(k, i - 1) + 1;
        } else {
            a[i] = a[m] + min(k * 2 + 1, i - m);
        }
        cout << a[i] + min(k, n - i) <<" ";
    }
    return 0;
}