
    Given a sequence of delivery efficiency scores for different route segments, where positive scores indicate faster-than-expected deliveries and negative scores represent delays, find the consecutive sequence of route segments that yields the highest combined performance multiplier. The performance multiplier for a sequence is calculated by multiplying the efficiency scores of adjacent route segments, and the goal is to identify the route segment combination that maximizes this multiplier to optimize future route planning.
    

    
def max_subarray_product(arr):
    """
    Given a sequence of delivery efficiency scores for different route segments, where positive scores indicate faster-than-expected deliveries and negative scores represent delays, find the consecutive sequence of route segments that yields the highest combined performance multiplier. The performance multiplier for a sequence is calculated by multiplying the efficiency scores of adjacent route segments, and the goal is to identify the route segment combination that maximizes this multiplier to optimize future route planning.
    

    """
def max_subarray_product(arr):
    """
    Given a sequence of delivery efficiency scores for different route segments, where positive scores indicate faster-than-expected deliveries and negative scores represent delays, find the consecutive sequence of route segments that yields the highest combined performance multiplier. The performance multiplier for a sequence is calculated by multiplying the efficiency scores of adjacent route segments, and the goal is to identify the route segment combination that maximizes this multiplier to optimize 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