Array Reduction Algorithm
Problem statement
The developers of Hackerland are working on an array reduction algorithm that takes in an array of n integers say arr and does the following until the array arr is empty:
- Initialize an array
resultas an empty array - Choose an integer
ksuch that1 ≤ k ≤ length of the array - Append the MEX of the first
kelements of the arrayarrto the arrayresult - Remove first
kelements of the arrayarr
Given an array arr, find the lexicographically maximum array result that can be obtained using the above algorithm.
Note:
- An array
xis lexicographically greater than an arrayyif in the first position wherexandydifferxi > yior if|x| > |y|andyis a prefix ofx(where|x|denotes the size of the arrayx). - The MEX of a set of non-negative integers is the minimal non-negative integer such that it is not in the set. For example, MEX({1,2,3}) = 0 and MEX({0,1,2,4,5}) = 3.
Function
arrayReductionAlgorithm(arr: int[]) → int[]Examples
Example 1
arr = [0,1,1,0]return = [2,2]
Given n = 4, arr = [0,1,1,0], one of the optimal ways to make array result lexicographically maximum is as follows -
- Take
k = 2, the MEX of the 1st and 2nd element ofarris 2. Soarr = [1,0]andresult = [2]. - Take
k = 2, the MEX of the 1st and 2nd element ofarris 2. Soarr = []andresult = [2,2].
arr is now empty and the answer is [2,2].
Constraints
- 1 <= n <= 10^5
- 0 <= arr[i] <= n