


给出每个人到旋转门的时间和进出方向,按先后顺序进出,优先前一个时刻同方向的进出。
# time = [0, 0, 1, 5]
# direction = [0, 1, 1, 0]
# time = [0, 0, 5, 5]
# direction = [0, 1, 1, 0]
time = [0, 1, 1, 3, 3]
direction = [0, 1, 0, 0, 1]
# time = [1, 2, 4]
# direction = [0, 1, 1]
# time = [1, 1, 3, 3, 4, 5, 6, 7, 7]
# direction = [1, 1, 0, 0, 0, 1, 1, 1, 1]
enter = deque()
leave = deque()
ans = [-1] * len(time)
preState = 1 # leave
lastUsed = -1 # last used time
cur = 0 # current time
for i, t in enumerate(time):
if t > lastUsed + 1:
preState = 1
cur = t
if direction[i] == 0:
enter.append(i)
else:
leave.append(i)
if i == len(time) - 1 or t != time[i+1]:
if preState == 1:
while leave:
ans[leave.popleft()] = cur
cur += 1
while enter and (i == len(time) - 1 or cur < time[i+1]):
ans[enter.popleft()] = cur
cur += 1
preState = 0
elif preState == 0:
while enter:
ans[enter.popleft()] = cur
cur += 1
while leave and (i == len(time) - 1 or cur < time[i+1]):
ans[leave.popleft()] = cur
cur += 1
preState = 1
lastUsed = cur - 1
print(ans)