Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- count = 0
- def do_damages(A, a=0, b= None):
- global count
- if count == 0:
- for n in range(len(A)):
- A[n] = [A[n], 1, n] #[value, damage, index]
- count += 1
- if b is None:
- b = len(A)
- if 1 < b - a:
- c = (a + b + 1) // 2
- do_damages(A,a,c)
- do_damages(A,c,b)
- #merge_sort(A,a,c)
- #merge_sort(A,c,b)
- L,R = A[a:c], A[c:b]
- i, j = 0, 0
- damage = 0
- if len(L) + len(R) <= 2:
- if L[0][0] > R[0][0]:
- L[0][1] += 1
- A[a] = R[0]
- A[a+1] = L[0]
- else:
- while a < b:
- if (j >= len(R)) or (i < len(L) and L[i][0] <= R[j][0]):
- try:
- L[i+1][1] += damage
- except:
- pass
- A[a] = L[i]
- i = i + 1
- else:
- try:
- L[i][1] += 1
- except:
- pass
- damage += 1
- A[a] = R[j]
- j = j + 1
- a = a + 1
- return A
- def get_damages(H):
- '''
- Input: H | list of bricks per house from west to east
- Output: D | list of damage per house from west to east
- '''
- h = do_damages(H)
- damagedict = {}
- damagelist = [0] * len(H)
- for house in h:
- damagedict[house[2]] = house[1]
- for index in damagedict:
- damagelist[index] = damagedict[index]
- return damagelist
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement