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# (.NET Core 3.1.201) (judge verdict: Time Limit Exceeded)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AtCoder2 {
	class Program {
		static void Main(string[] args) {
          
       var inputArray = retreiveLongArray();
			var inputCount = 2;

			// 不正な入力は処理しない
			if (inputArray.Length != inputCount) {
				Console.WriteLine("invalid input");
				return;
			}
			var N = (int)inputArray[0];
			var K = (int)inputArray[1];


			var inpArray = retreiveLongArray();

			var currentRight = new Dictionary<int, Dictionary<int,bool>>();

			for (int i = 0; i < N; i++) {
				var isTodoku = new Dictionary<int, bool>();
				var power = inpArray[i];
				for (int j = 0; j < N; j++) {
					var hikari = Math.Abs(i - j) <= power;
					isTodoku.Add(j, hikari);
				}
				currentRight.Add(i, isTodoku);
			}

			//k回処理する
			for (int i = 0; i < K-1; i++) {
				var nextRight = new Dictionary<int, Dictionary<int, bool>>();

				for (int j = 0; j < N; j++) {
					var power = 0;
					for (int k = 0; k < N; k++) {
						power += currentRight[k][j] ? 1 : 0;
					}
					var isTodoku = new Dictionary<int, bool>();
					for (int k = 0; k < N; k++) {
						var hikari = Math.Abs(k - j) <= power;
						isTodoku.Add(k, hikari);
					}
					nextRight.Add(j, isTodoku);

				}
				currentRight = nextRight;
			}


			//答えの出力
			var ansArray = new List<int>();

			for (int i = 0; i < N; i++) {
				var power = 0;
				for (int j = 0; j < N; j++) {
					power += currentRight[j][i] ? 1 : 0;
				}
				ansArray.Add(power);
			}

			var ans = string.Join(" ", ansArray);
			Console.WriteLine(ans);

		}

		/// <summary>
		/// スペースで区切られた文字列配列の入力を受け取る
		/// </summary>
		/// <returns></returns>
		private static string[] retreiveStringArray() {
			var inputArray = Console.ReadLine().Split(' ');
			return inputArray;
		}

		/// <summary>
		/// スペースで区切られた整数配列の入力を受け取る
		/// </summary>
		/// <returns></returns>
		private static long[] retreiveLongArray() {
			var inputArray = Console.ReadLine().Split(' ');
			var longArray = inputArray.Select(s => long.Parse(s));
			return longArray.ToArray();
		}
	}
}