
    Given a series of delivery efficiency scores for consecutive route segments, where positive scores indicate time saved and negative scores represent delays, find the continuous sequence of route segments that yields the highest combined efficiency score when their impacts are multiplied together. This optimal sequence will help identify the most consistently efficient stretch of the delivery network that should be prioritized for future route planning.
    

    
def max_subarray_product(arr):
    """
    Given a series of delivery efficiency scores for consecutive route segments, where positive scores indicate time saved and negative scores represent delays, find the continuous sequence of route segments that yields the highest combined efficiency score when their impacts are multiplied together. This optimal sequence will help identify the most consistently efficient stretch of the delivery network that should be prioritized for future route planning.
    

    """
def max_subarray_product(arr):
    """
    Given a series of delivery efficiency scores for consecutive route segments, where positive scores indicate time saved and negative scores represent delays, find the continuous sequence of route segments that yields the highest combined efficiency score when their impacts are multiplied together. This optimal sequence will help identify the most consistently efficient stretch of the delivery network that should be prioritized for future route planning.
    

    """
    n = len(arr)
    max_ending_here = 1
    min_ending_here = 1
    max_so_far = 0
    flag = 0
    for i in range(0, n):
        if arr[i] > 0:
            max_ending_here = max_ending_here * arr[i]
            min_ending_here = min(min_ending_here * arr[i], 1)
            flag = 1
        elif arr[i] == 0:
            max_ending_here = 1
            min_ending_here = 1
        else:
            temp = max_ending_here
            max_ending_here = max(min_ending_here * arr[i], 1)
            min_ending_here = temp * arr[i]
        if max_so_far < max_ending_here:
            max_so_far = max_ending_here
    if flag == 0 and max_so_far == 0:
        return 0
    return max_so_far