Python Fish
def fish(a: list[int], b: list[int]) -> int:
size = len(a)
dead = 0
downstream: list[int] = []
for i in range(size):
if b[i] == 1:
downstream.append(a[i])
else:
while downstream:
dead += 1
if a[i] > downstream[-1]:
downstream.pop()
else:
break
return size - dead
This uses a stack for downstream fish and resolves fights only when opposite directions meet.