def getMaxMusle(distances, scores):
if(len(distances) == 0):
return []
elif(len(distances) == 1):
return [distances[0] * 2 + scores[0]]
import heapq as hq
n = len(distances)
rights = [(- distances[i] * 2 - scores[i], i) for i in range(n)]
hq.heapify(rights)
lefts, res, curr_i, curr_score = [], [], -1, 0
for _ in range(n):
if(not rights or
(lefts and lefts[0][0] <= rights[0][0] + 2 * distances[curr_i])):
curr_score -= hq.heappop(lefts)[0]
res.append(curr_score)
else:
curr_score += (- rights[0][0] - 2 *
(distances[curr_i] if(curr_i >= 0) else 0))
curr_i = max(curr_i, rights[0][1])
hq.heappop(rights)
res.append(curr_score)
while(rights and rights[0][1] < curr_i):
temp = hq.heappop(rights)
hq.heappush(lefts, (temp[0] + 2 * distances[temp[1]], temp[1]))
return res
AC 100