#
# 
# @param A int整型一维数组 
# @return int整型
#
class Solution:
    def count(self, left, right, index_l, index_r, data):
        high = min(left, right)
        water = 0
        for i in range(index_l + 1, index_r):
            water += (high - data[i])
        return water

    def trap(self , A ):
        # write code here
        water = 0
        lock = True
        left = 0
        right = 0
        index_l = 0
        index_r = 0
        number = 0
        for i in range(0, len(A)):
            if lock and A[i] != 0:
                lock = False
                left = A[i]
                index_l = i
                continue
            if lock:
                continue
            if A[i] >= left and number == 0:
                left = A[i]
                index_l = i
            elif A[i] < left:
                number += 1
            elif A[i] >= left and number != 0:
                right = A[i]
                index_r = i
                water += Solution.count(self, left, right, index_l, index_r, A)
                left = A[i]
                index_l = i
                number = 0
            if i == len(A) - 1 and number != 0:
                B = A[index_l: len(A)]
                B.reverse()
                water += Solution.trap(self, B)
        return water