10959: Codility - MaxCounters
[Creator : ]
Description
Calculate the values of counters after applying all alternating operations: increase counter by $1$; set value of all counters to current maximum.
You are given $N$ counters, initially set to $0$, and you have two possible operations on them:
You are given $N$ counters, initially set to $0$, and you have two possible operations on them:
A non-empty array $A$ is given. This array represents consecutive operations:
increase(X)
− counter $X$ is increased by $1$,max counter
− all counters are set to the maximum value of any counter.
For example, given integer $N = 5$ and array $A$ such that:
- if $A[K] = X$, such that $1 ≤ X ≤ N$, then operation $K$ is increase(X),
- if $A[K] = N + 1$ then operation $K$ is max counter.
A[0] = 3 A[1] = 4 A[2] = 4 A[3] = 6 A[4] = 1 A[5] = 4 A[6] = 4the values of the counters after each consecutive operation will be:
(0, 0, 1, 0, 0) (0, 0, 1, 1, 0) (0, 0, 1, 2, 0) (2, 2, 2, 2, 2) (3, 2, 2, 2, 2) (3, 2, 2, 3, 2) (3, 2, 2, 4, 2)The goal is to calculate the value of every counter after all operations.
Input
Write an efficient algorithm for the following assumptions:
- $N$ are integers within the range $[1..100,000]$;
- each element of array $A$ is an integer within the range $[1..N + 1]$.
Output
returns a sequence of integers representing the values of the counters.
Sample 1 Input
7
3 4 4 6 1 4 4
Sample 1 Output
3 2 2 4 2