You are given N counters, initially set to 0, and you have two possible operations on them:
- increase(X) − counter X is increased by 1,
- max counter − all counters are set to the maximum value of any counter.
A non-empty array A of M integers is given. This array represents consecutive operations:
- 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.
For example, given integer N = 5 and array A such that:
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.
Write a function:
def solution(N, A)
that, given an integer N and a non-empty array A consisting of M integers, returns a sequence of integers representing the values of the counters.
Result array should be returned as an array of integers.
For example, given:
A[0] = 3 A[1] = 4 A[2] = 4 A[3] = 6 A[4] = 1 A[5] = 4 A[6] = 4the function should return [3, 2, 2, 4, 2], as explained above.
Write an efficient algorithm for the following assumptions:
- N and M are integers within the range [1..100,000];
- each element of array A is an integer within the range [1..N + 1].
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(N, A):
B = [0] * N
maxx=0
for k,x in enumerate(A):
if x == N + 1:
B = [maxx] * N
else:
result[position] = result[position] > lastUpdate
? result[position] + 1 : lastUpdate + 1;
B[x-1] = B[x-1] + 1
if maxx < B[x-1]: maxx = B[x-1]
return B
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(N, A):
B = [0] * N
maxx=0
for k,x in enumerate(A):
if x == N + 1:
B = [maxx] * N
else:
result[position] = B[x-1] > lastUpdate
? result[position] + 1 : lastUpdate + 1;
B[x-1] = B[x-1] + 1
if maxx < B[x-1]: maxx = B[x-1]
return B
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(N, A):
B = [0] * N
maxx=0
for k,x in enumerate(A):
if x == N + 1:
B = [maxx] * N
else:
B[x-1] = B[x-1] > lastUpdate
? r B[x-1] + 1 : lastUpdate + 1;
B[x-1] = B[x-1] + 1
if maxx < B[x-1]: maxx = B[x-1]
return B
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(N, A):
B = [0] * N
maxx=0
for k,x in enumerate(A):
if x == N + 1:
B = [maxx] * N
else:
B[x-1] = B[x-1] > lastUpdate
? r B[x-1] + 1 : lastUpdate + 1;
# B[x-1] = B[x-1] + 1
if maxx < B[x-1]: maxx = B[x-1]
return B
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(N, A):
B = [0] * N
maxx=0
for k,x in enumerate(A):
if x == N + 1:
last = maxx
else:
B[x-1] = B[x-1] > lastUpdate
? r B[x-1] + 1 : lastUpdate + 1;
# B[x-1] = B[x-1] + 1
if maxx < B[x-1]: maxx = B[x-1]
return B
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(N, A):
B = [0] * N
maxx=0
for k,x in enumerate(A):
if x == N + 1:
last = maxx
B[x-1] = B[x-1] > lastUpdate
? r B[x-1] + 1 : lastUpdate + 1;
# B[x-1] = B[x-1] + 1
if maxx < B[x-1]: maxx = B[x-1]
return B
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(N, A):
B = [0] * N
maxx=0
for k,x in enumerate(A):
if x == N + 1:
last = maxx
B[x-1] = B[x-1] > lastUpdate ? r B[x-1] + 1 : lastUpdate + 1;
# B[x-1] = B[x-1] + 1
if maxx < B[x-1]: maxx = B[x-1]
return B
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(N, A):
B = [0] * N
maxx=0
for k,x in enumerate(A):
if x == N + 1:
last = maxx
B[x-1] = B[x-1] > last ? B[x-1] + 1 : last + 1;
# B[x-1] = B[x-1] + 1
if maxx < B[x-1]: maxx = B[x-1]
return B
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(N, A):
B = [0] * N
maxx=0
for k,x in enumerate(A):
if x == N + 1:
last = maxx
else:
B[x-1] = B[x-1] > lastUpdate
? r B[x-1] + 1 : lastUpdate + 1;
# B[x-1] = B[x-1] + 1
if maxx < B[x-1]: maxx = B[x-1]
return B
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(N, A):
B = [0] * N
maxx=0
for k,x in enumerate(A):
if x == N + 1:
last = maxx
else:
B[x-1] = B[x-1] > last ? B[x-1] + 1 : last + 1;
# B[x-1] = B[x-1] + 1
if maxx < B[x-1]: maxx = B[x-1]
return B
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(N, A):
B = [0] * N
maxx=0
for k,x in enumerate(A):
if x == N + 1:
last = maxx
else:
B[x-1] = B[x-1] > last ? B[x-1] + 1 : last + 1;
# B[x-1] = B[x-1] + 1
if maxx < B[x-1]: maxx = B[x-1]
for (int i = 0; i < N; ++i) {
if(result[i] < lastUpdate) {
result[i] = lastUpdate;
}
}
return B
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(N, A):
B = [0] * N
maxx=0
for k,x in enumerate(A):
if x == N + 1:
last = maxx
else:
B[x-1] = B[x-1] > last ? B[x-1] + 1 : last + 1;
# B[x-1] = B[x-1] + 1
if maxx < B[x-1]: maxx = B[x-1]
for k,x in enumerate(A):
if(result[i] < lastUpdate) {
result[i] = lastUpdate;
}
}
return B
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(N, A):
B = [0] * N
maxx=0
last =0
for k,x in enumerate(A):
if x == N + 1:
last = maxx
else:
B[x-1] = B[x-1] > last ? B[x-1] + 1 : last + 1;
# B[x-1] = B[x-1] + 1
if maxx < B[x-1]: maxx = B[x-1]
for k,b in enumerate(V):
if(b < last) {
result[i] = lastUpdate;
}
}
return B
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(N, A):
B = [0] * N
maxx=0
last =0
for k,x in enumerate(A):
if x == N + 1:
last = maxx
else:
B[x-1] = B[x-1] > last ? B[x-1] + 1 : last + 1;
# B[x-1] = B[x-1] + 1
if maxx < B[x-1]: maxx = B[x-1]
for k,b in enumerate(B):
if b < last: B[k] = last;
return B
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(N, A):
B = [0] * N
maxx=0
last =0
for k,x in enumerate(A):
if x == N + 1:
last = maxx
else:
B[x-1] = B[x-1] > last ? B[x-1] + 1 : last + 1;
# B[x-1] = B[x-1] + 1
if maxx < B[x-1]: maxx = B[x-1]
for k,b in enumerate(B):
if b < last: B[k] = last
return B
Traceback (most recent call last): File "exec.py", line 145, in <module> main() File "exec.py", line 86, in main sol = __import__('solution') File "/tmp/solution.py", line 14 B[x-1] = B[x-1] > last ? B[x-1] + 1 : last + 1; ^ SyntaxError: invalid syntax
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(N, A):
B = [0] * N
maxx=0
last =0
for k,x in enumerate(A):
if x == N + 1:
last = maxx
else:
B[x-1] = B[x-1] > last ? B[x-1] + 1 : last + 1
# B[x-1] = B[x-1] + 1
if maxx < B[x-1]: maxx = B[x-1]
for k,b in enumerate(B):
if b < last: B[k] = last
return B
Traceback (most recent call last): File "exec.py", line 145, in <module> main() File "exec.py", line 86, in main sol = __import__('solution') File "/tmp/solution.py", line 14 B[x-1] = B[x-1] > last ? B[x-1] + 1 : last + 1 ^ SyntaxError: invalid syntax
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(N, A):
B = [0] * N
maxx=0
last =0
for k,x in enumerate(A):
if x == N + 1:
last = maxx
else:
B[x-1] = iB[x-1] > last ? B[x-1] + 1 : last + 1
# B[x-1] = B[x-1] + 1
if maxx < B[x-1]: maxx = B[x-1]
for k,b in enumerate(B):
if b < last: B[k] = last
return B
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(N, A):
B = [0] * N
maxx=0
last =0
for k,x in enumerate(A):
if x == N + 1:
last = maxx
else:
B[x-1] = if B[x-1] > last:
? B[x-1] + 1 : last + 1
# B[x-1] = B[x-1] + 1
if maxx < B[x-1]: maxx = B[x-1]
for k,b in enumerate(B):
if b < last: B[k] = last
return B
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(N, A):
B = [0] * N
maxx=0
last =0
for k,x in enumerate(A):
if x == N + 1:
last = maxx
else:
if B[x-1] > last:
B[x-1] = B[x-1] + 1 : last + 1
# B[x-1] = B[x-1] + 1
if maxx < B[x-1]: maxx = B[x-1]
for k,b in enumerate(B):
if b < last: B[k] = last
return B
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(N, A):
B = [0] * N
maxx=0
last =0
for k,x in enumerate(A):
if x == N + 1:
last = maxx
else:
if B[x-1] > last:
B[x-1] = B[x-1] + 1
else:
last + 1
# B[x-1] = B[x-1] + 1
if maxx < B[x-1]: maxx = B[x-1]
for k,b in enumerate(B):
if b < last: B[k] = last
return B
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(N, A):
B = [0] * N
maxx=0
last =0
for k,x in enumerate(A):
if x == N + 1:
last = maxx
else:
if B[x-1] > last:
B[x-1] = B[x-1] + 1
else:
B[x-1] = last + 1
if maxx < B[x-1]: maxx = B[x-1]
for k,b in enumerate(B):
if b < last: B[k] = last
return B
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(N, A):
B = [0] * N
maxx=0
last =0
for k,x in enumerate(A):
if x == N + 1:
last = maxx
else:
if B[x-1] > last:
B[x-1] = B[x-1] + 1
else:
B[x-1] = last + 1
if maxx < B[x-1]: maxx = B[x-1]
for k,b in enumerate(B):
if b < last: B[k] = last
return B
# you can write to stdout for debugging purposes, e.g.
# print("this is a debug message")
def solution(N, A):
B = [0] * N
maxx=0
last =0
for k,x in enumerate(A):
if x == N + 1:
last = maxx
else:
if B[x-1] > last:
B[x-1] = B[x-1] + 1
else:
B[x-1] = last + 1
if maxx < B[x-1]: maxx = B[x-1]
for k,b in enumerate(B):
if b < last: B[k] = last
return B
The solution obtained perfect score.