#coding:utf-8
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param A int整型一维数组 
# @param n int整型 
# @return int整型
#
class Solution:
    def getDis(self , A , n ):
        # write code here
        ##debug
        ##维护两个数组,当前数组前面最小的,和后面最大的
        left_min = [float('inf')] * n
        right_max = [float('-inf')] * n
        
        #set left min
        left_min[0] = A[0]
        for i in range(1, n):
            cur_min = min(A[i], left_min[i - 1])
            #print ("cur_min: ", cur_min)
            left_min[i] = cur_min
        
        right_max[n - 1] = A[n - 1]
        for i in range(n - 2, -1, -1):
            cur_max = max(A[i], right_max[i + 1])
            right_max[i] = cur_max
        #print ("Left min: ", left_min)
        #print ("Right max: ", right_max)

        #calculte
        max_val = 0
        for i in range(0, n):
            #print (i)
            max_val = max(max_val, right_max[i] - left_min[i])

        return max_val