text: """
  
  Given n non-negative integers representing an elevation map where 
  the width of each bar is 1, compute how much water it can trap after raining.
  
  Example 1:
  
  Input: height = [0,1,0,2,1,0,1,3,2,1,2,1]
  Output: 6
  Explanation: The above elevation map (black section) is represented by array [0,1,0,2,1,0,1,3,2,1,2,1]. In this case, 6 units of rain water (blue section) are being trapped.
  
  Example 2:
  
  Input: height = [4,2,0,3,2,5]
  Output: 9
   
  
  Constraints:
  
  n == height.length
  1 <= n <= 2 * 104
  0 <= height[i] <= 105
  
  """
  
  class Solution:
      def trap(self, height: List[int]) -> int:
          areas = 0
          max_l = max_r = 0
          l = 0
          r = len(height)-1
          while l < r:
              if height[l] < height[r]:
                  if height[l] > max_l:
                      max_l = height[l]
                  else:
                      areas += max_l - height[l]
                  l +=1
              else:
                  if height[r] > max_r:
                      max_r = height[r]
                  else:
                      areas += max_r - height[r]
                  r -=1
          return areas