PHP Fish
function fish(array $a, array $b): int
{
    $size  = count($a);
    $dead = 0;
    $fish  = [];
    for ($i = 0; $i < $size; $i++) {
        if ($b[$i] === 1) {
            $fish[] = $a[$i];
        } elseif (isset($fish[0])) {
            while (isset($fish[0])) {
                $dead++;
                if ($a[$i] > end($fish)) {
                    array_pop($fish);
                } else {
                    break;
                }
            }
        }
    }

    return $size - $dead;
}

This uses a stack for downstream fish and resolves fights only when opposite directions meet.