
    Given a sequence of traffic flow measurements along a delivery route, where positive values represent smooth traffic flow and negative values indicate congestion, find the continuous route segment that would yield the maximum efficiency score when combining their flow rates multiplicatively. The efficiency score helps dispatchers identify the optimal time window and route segment for scheduling time-sensitive deliveries.
    

    
def max_subarray_product(arr):
    """
    Given a sequence of traffic flow measurements along a delivery route, where positive values represent smooth traffic flow and negative values indicate congestion, find the continuous route segment that would yield the maximum efficiency score when combining their flow rates multiplicatively. The efficiency score helps dispatchers identify the optimal time window and route segment for scheduling time-sensitive deliveries.
    

    """
def max_subarray_product(arr):
    """
    Given a sequence of traffic flow measurements along a delivery route, where positive values represent smooth traffic flow and negative values indicate congestion, find the continuous route segment that would yield the maximum efficiency score when combining their flow rates multiplicatively. The efficiency score helps dispatchers identify the optimal time window and route segment for scheduling time-sensitive deliveries.
    

    """
    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