
    Given a student's daily assessment scores showing performance changes (positive for improvement, negative for decline), find the consecutive period that demonstrates the most significant sustained progress, determined by multiplying the daily performance changes. The goal is to identify the time frame where the student showed the most consistent and substantial improvement pattern, helping educators understand optimal learning periods.
    

    
def max_subarray_product(arr):
    """
    Given a student's daily assessment scores showing performance changes (positive for improvement, negative for decline), find the consecutive period that demonstrates the most significant sustained progress, determined by multiplying the daily performance changes. The goal is to identify the time frame where the student showed the most consistent and substantial improvement pattern, helping educators understand optimal learning periods.
    

    """
def max_subarray_product(arr):
    """
    Given a student's daily assessment scores showing performance changes (positive for improvement, negative for decline), find the consecutive period that demonstrates the most significant sustained progress, determined by multiplying the daily performance changes. The goal is to identify the time frame where the student showed the most consistent and substantial improvement pattern, helping educators understand optimal learning periods.
    

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