Problem:
Score : 500 points

Problem Statement

We have N bulbs arranged on a number line, numbered 1 to N from left to right.
Bulb i is at coordinate i.

Each bulb has a non-negative integer parameter called intensity.
When there is a bulb of intensity d at coordinate x, the bulb illuminates the segment from coordinate x-d-0.5 to x+d+0.5.
Initially, the intensity of Bulb i is A_i. We will now do the following operation K times in a row:

For each integer i between 1 and N (inclusive), let B_i be the number of bulbs illuminating coordinate i. Then, change the intensity of each bulb i to B_i.

Find the intensity of each bulb after the K operations.

Constraints

1 \leq N \leq 2 \times 10^5

1 \leq K \leq 2 \times 10^5

0 \leq A_i \leq N

Input

Input is given from Standard Input in the following format:

N K
A_1 A_2 \ldots A_N

Output

Print the intensity A{'}_i of each bulb i after the K operations to Standard Output in the following format:

A{'}_1 A{'}_2 \ldots A{'}_N

Sample Input 1

5 1
1 0 0 1 0

Sample Output 1

1 2 2 1 2

Initially, only Bulb 1 illuminates coordinate 1, so the intensity of Bulb 1 becomes 1 after the operation.
Similarly, the bulbs initially illuminating coordinate 2 are Bulb 1 and 2, so the intensity of Bulb 2 becomes 2.

Sample Input 2

5 2
1 0 0 1 0

Sample Output 2

3 3 4 4 3

Solution in C++ (GCC 9.2.1) (judge verdict: Accepted)

#include <bits/stdc++.h>

#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define all(v) v.begin(), v.end()
#define SP << " " 
#define LLi long long int

using namespace std;

int imax=2147483647;
long long int llimax=9223372036854775807;

//int型vectorを出力
void PV(vector<int> pvv) {
	rep(i, pvv.size()) cout << pvv[i] SP;
	cout << endl;
}

//LLi型vectorを出力
void PVL(vector<LLi> pvv) {
	rep(i, pvv.size()) cout << pvv[i] SP;
	cout << endl;
}

int main(){

	int n, k, ta, ti, flag;
	vector<int> v, w1, w2;

	cin>> n >> k;
	v.resize(n);
	w1.resize(n+1);
	w2.resize(n+1);

	rep(i, n) cin >> v[i];

	//PV(v);
	rep(i, k) {
		rep(j, n){
			w1[j]=0;
			w2[j]=0;
		}
		rep(j, n){
			ta=max(0, j-v[j]);
			ti=min(n-1, j+v[j]);
			//if(ta!=j) w1[ta]++;
			//if(ti!=j) w2[ti]++;
			w1[ta]++;
			w2[ti]++;
		}
		
		//PV(w1);
		//PV(w2);
		flag=1;
		v[0]=w1[0];
		if(v[0]!=n) flag=0;
		for(int j=1;j<n;j++){
			v[j]=v[j-1]+w1[j]-w2[j-1];
			if(v[j]!=n) flag=0;
		}
		//PV(v);
		if(flag){
			PV(v);
			return 0;
		}
	}
 
	PV(v);
	return 0;
}

/*
	PV(v);
	rep(i, k) {
		rep(j, n){
			w[j]=0;
			rep(l, n){
				if(abs(l-j)<=v[l]) w[j]++;
			}
		}
		rep(j, n) v[j]=w[j];
		PV(v);
	}
*/