import sys, bisect, math, itertools, heapq, collections

from operator import itemgetter

# a.sort(key=itemgetter(i)) # i番目要素でsort

from functools import lru_cache

# @lru_cache(maxsize=None)

sys.setrecursionlimit(10**8)

input = sys.stdin.readline

INF = float('inf')

mod = 10**9 + 7

eps = 10**-7





def inp():

    '''

    一つの整数

    '''

    return int(eval(input()))





def inpl():

    '''

    一行に複数の整数

    '''

    return list(map(int, input().split()))





def str_inp():

    '''

    文字列をリストとして読み込む

    '''

    return list(input()[:-1])





n, k = inpl()

a = inpl()

dp = [(0, 0)] * n

changed=set(range(n))

for j in range(k):

    for i in changed:

        l = max(0, i - a[i])

        r = min(n - 1, i + a[i])

        dp[i] = (l, r)

    imos = [0] * n

    for i in range(n):

        l, r = dp[i]

        imos[l] += 1

        if r < n - 1:

            imos[r + 1] -= 1

    tmp = 0

    for i in range(n):

        tmp += imos[i]

        a[i] = tmp

    if j>50:

        break

print((*a))

import sys, bisect, math, itertools, heapq, collections

from operator import itemgetter

# a.sort(key=itemgetter(i)) # i番目要素でsort

from functools import lru_cache

# @lru_cache(maxsize=None)

sys.setrecursionlimit(10**8)

input = sys.stdin.readline

INF = float('inf')

mod = 10**9 + 7

eps = 10**-7





def inp():

    '''

    一つの整数

    '''

    return int(eval(input()))





def inpl():

    '''

    一行に複数の整数

    '''

    return list(map(int, input().split()))





def str_inp():

    '''

    文字列をリストとして読み込む

    '''

    return list(input()[:-1])





n, k = inpl()

a = inpl()

dp = [(0, 0)] * n

changed = set(range(n))

for j in range(k):

    for i in changed:

        l = max(0, i - a[i])

        r = min(n - 1, i + a[i])

        dp[i] = (l, r)

    imos = [0] * n

    for i in range(n):

        l, r = dp[i]

        imos[l] += 1

        if r < n - 1:

            imos[r + 1] -= 1

    tmp = 0

    for i in range(n):

        tmp += imos[i]

        a[i] = tmp

    if imos[0]==n:

        break

print((*a))

import sys, bisect, math, itertools, heapq, collections
from operator import itemgetter

# a.sort(key=itemgetter(i)) # i番目要素でsort
from functools import lru_cache

# @lru_cache(maxsize=None)
sys.setrecursionlimit(10**8)
input = sys.stdin.readline
INF = float("inf")
mod = 10**9 + 7
eps = 10**-7


def inp():
    """
    一つの整数
    """
    return int(eval(input()))


def inpl():
    """
    一行に複数の整数
    """
    return list(map(int, input().split()))


def str_inp():
    """
    文字列をリストとして読み込む
    """
    return list(input()[:-1])


n, k = inpl()
a = inpl()
dp = [(0, 0)] * n
changed = set(range(n))
for j in range(k):
    for i in changed:
        l = max(0, i - a[i])
        r = min(n - 1, i + a[i])
        dp[i] = (l, r)
    imos = [0] * n
    for i in range(n):
        l, r = dp[i]
        imos[l] += 1
        if r < n - 1:
            imos[r + 1] -= 1
    tmp = 0
    for i in range(n):
        tmp += imos[i]
        a[i] = tmp
    if j > 50:
        break
print((*a))

import sys, bisect, math, itertools, heapq, collections
from operator import itemgetter

# a.sort(key=itemgetter(i)) # i番目要素でsort
from functools import lru_cache

# @lru_cache(maxsize=None)
sys.setrecursionlimit(10**8)
input = sys.stdin.readline
INF = float("inf")
mod = 10**9 + 7
eps = 10**-7


def inp():
    """
    一つの整数
    """
    return int(eval(input()))


def inpl():
    """
    一行に複数の整数
    """
    return list(map(int, input().split()))


def str_inp():
    """
    文字列をリストとして読み込む
    """
    return list(input()[:-1])


n, k = inpl()
a = inpl()
dp = [(0, 0)] * n
changed = set(range(n))
for j in range(k):
    for i in changed:
        l = max(0, i - a[i])
        r = min(n - 1, i + a[i])
        dp[i] = (l, r)
    imos = [0] * n
    for i in range(n):
        l, r = dp[i]
        imos[l] += 1
        if r < n - 1:
            imos[r + 1] -= 1
    tmp = 0
    for i in range(n):
        tmp += imos[i]
        a[i] = tmp
    if imos[0] == n:
        break
print((*a))

-    if j > 50: +    if imos[0] == n: