'''
解题思路:
1、从左向右,从右向左各扫一遍,记住当前最大值,
2、如果当前值小于最大值,则计算水容量,如果当前值大于最大值,则更新最大值
3、对应位置左右扫描取小,即是实际容量,
4、第二次扫描时同时计算容量,少一次遍历
'''
# max water
# @param arr int整型一维数组 the array
# @return long长整型
#
class Solution:
    def maxWater(self , arr ):
        # write code here

        L = arr
        n = len(arr)
        if n<3:
            return 0

        i_max = arr[0]
        w1 = []
        for i in range(1,n-1):
            if L[i]>i_max:
                i_max = L[i]
                w1.append(0)
            else:
                w1.append(i_max-L[i])

        i_max = arr[-1]
        w2 = []
        res = 0
        for i in range(n-2,0,-1):
            if L[i]>i_max:
                i_max = L[i]
            else:
                res += min(w1[i-1],i_max-L[i])
        #print(w1)
        #print(w2)
        return res

#Solution().maxWater([3,1,2,5,2,4])