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: Wrong Answer)

#pragma GCC optimize("O2")
/*
    ____        __
   / __ \____  / /_  ____ _____ ___
  / /_/ / __ \/ __ \/ __ `/ __ `__ \
 / _, _/ /_/ / / / / /_/ / / / / / /
/_/ |_|\____/_/ /_/\__,_/_/ /_/ /_/
*/
#include<bits/stdc++.h>

typedef long long ll ;

#define pll pair<ll , ll >
#define X   first
#define Y   second
#define mp  make_pair
#define pii pair<int , int>
#define vec vector
#define vpii vector<pair<int , int>>
#define i_n   int i = 0 ; i< n ; i++
#define cn  int n ; cin>>n
#define file_io freopen("input.txt", "r", stdin);freopen("output.txt", "w", stdout);
#define migmig ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define cina int a[n] ; for(int i = 0 ; i < n ; i++) cin>>a[i]
#define pb push_back

ll poww(ll a, ll b, ll md) {
    return (!b ? 1 : (b & 1 ? a * poww(a * a % md, b / 2, md) % md : poww(a * a % md, b / 2, md) % md));
}
int gcd(int a, int b) {
   if (b == 0)
      return a;
   return gcd(b, a % b);
}
using namespace std;
const int maxn = 2000*100+5 ;
const ll inf = 9223372036854775807 ;
const ll mod = 1e9 + 7 ;
int n , k , a[maxn] , b[maxn] , c[maxn] , g  ; 
int main()
{
	migmig ;
 	cin>>n>>k ; 
 	for(int i = 1 ; i <= n ; i ++ )
 	{
 		cin>>a[i] ; 
 		if(a[i] > 0 ) g = 1 ; 
	 }
	 if(!g)
	 {
	 	for(int i = 1 ; i <= n ; i ++ )
	 	{
	 		cout<<k<<' ' ; 
		 }
		 return 0 ; 
	 }
	 if(k >= 1000 )
	 {
	 	for(int i = 1 ; i <= n ; i ++ )
	 	{
	 		cout<<n<< " " ; 
		 }
		 cout<<endl ;
		 return 0 ;  
	 }
	 for(int j = 1 ; j <= k ; j ++ )
	 {
	 	memset(b , 0 , sizeof b) ; 
	 	memset(c , 0 , sizeof c) ; 
	 	for(int i = 1 ; i <= n ; i ++ )
	 	{
	 		b[i] += 1 ; 
	 		b[i+a[i]+1] -= 1 ; 
	 		//cout<<b[i]<< " " ; 
		 }
		 //cout<<endl; 
		 for(int i = 1 ; i <= n ; i ++ )
		 {
		 	c[i] += 1 ; 
		 	c[max(i-a[i]-1 , 0)] -= 1 ; 
		 }
		int cnt = 0 ; 
		 for(int i = 1 ; i <= n ; i ++ )
		 {
		 	cnt+=b[i] ; 
		 	a[i] = cnt ; 
		 }
		 cnt = 0 ; 
		for(int i = n ; i >=  1 ; i -- )
		{
			cnt+=c[i] ; 
			a[i] -- ; 
			a[i] += cnt ; 
		}
	 }
	 for(int i = 1;  i<= n ; i ++ )
	 {
	 	cout<<a[i] <<  ' ' ; 
	 }
	 

}
//////
////////
///////////