def solve(k, s, p):
seat1 = s[0]
best = -1
unlucky = (0, -1) # min(accum), position
accum = 1
# process all persons between start of the array and the seat #1 position
for i, pos in enumerate(p):
if pos <= seat1:
best = i+1
accum -= 1
else:
break
if accum < 0:
unlucky = (accum, 1)
# process all seats/persons in reverse direction
i = k
j = k-1
while i >= 0 and p[i] > seat1:
if s[j] >= p[i]: # a seat
accum += 1
j -= 1
else: # a person
accum -= 1
i -= 1
if best == -1 and accum == 0:
best = i+2 # +1 because indexing starts with 0 & +1 because of pre-decrement
if accum < unlucky[0]:
unlucky = (accum, i+2)
return (best, unlucky[1])
print(solve(3, [2,5,8], [3,4,6,8]))
ZGVmIHNvbHZlKGssIHMsIHApOgogIHNlYXQxID0gc1swXQogIGJlc3QgPSAtMQogIHVubHVja3kgPSAoMCwgLTEpICMgbWluKGFjY3VtKSwgcG9zaXRpb24KICBhY2N1bSA9IDEKCiAgIyBwcm9jZXNzIGFsbCBwZXJzb25zIGJldHdlZW4gc3RhcnQgb2YgdGhlIGFycmF5IGFuZCB0aGUgc2VhdCAjMSBwb3NpdGlvbgogIGZvciBpLCBwb3MgaW4gZW51bWVyYXRlKHApOgogICAgaWYgcG9zIDw9IHNlYXQxOgogICAgICBiZXN0ID0gaSsxCiAgICAgIGFjY3VtIC09IDEKICAgIGVsc2U6CiAgICAgIGJyZWFrCgogIGlmIGFjY3VtIDwgMDoKICAgIHVubHVja3kgPSAoYWNjdW0sIDEpCgogICMgcHJvY2VzcyBhbGwgc2VhdHMvcGVyc29ucyBpbiByZXZlcnNlIGRpcmVjdGlvbgogIGkgPSBrCiAgaiA9IGstMQogIHdoaWxlIGkgPj0gMCBhbmQgcFtpXSA+IHNlYXQxOgogICAgaWYgc1tqXSA+PSBwW2ldOiAjIGEgc2VhdAogICAgICBhY2N1bSArPSAxCiAgICAgIGogLT0gMQogICAgZWxzZTogIyBhIHBlcnNvbgogICAgICBhY2N1bSAtPSAxCiAgICAgIGkgLT0gMQoKICAgIGlmIGJlc3QgPT0gLTEgYW5kIGFjY3VtID09IDA6CiAgICAgIGJlc3QgPSBpKzIgIyArMSBiZWNhdXNlIGluZGV4aW5nIHN0YXJ0cyB3aXRoIDAgJiArMSBiZWNhdXNlIG9mIHByZS1kZWNyZW1lbnQKCiAgICBpZiBhY2N1bSA8IHVubHVja3lbMF06CiAgICAgIHVubHVja3kgPSAoYWNjdW0sIGkrMikKCiAgcmV0dXJuIChiZXN0LCB1bmx1Y2t5WzFdKQoKCnByaW50KHNvbHZlKDMsIFsyLDUsOF0sIFszLDQsNiw4XSkpCg==