// 两次遍历:从左向右得到动态最大值;从右到左得到动态最大值
long long maxWater(int* arr, int arrLen ) 
{
    // write code here
    long long res=0;
    int i=0;
    int max=0;
    int a[arrLen];
    a[0]=arr[0];
    int b[arrLen];
    b[arrLen-1]=arr[arrLen-1];
    for(i=0;i<arrLen;i++)     // 从左向右遍历
    {
        max=fmax(max,arr[i]);
        a[i]=max;
    }
    max=0;   // 重置最大值
    for(i=arrLen-1;i>-1;i--)   // 从右向左
    {
        max=fmax(max,arr[i]);
        b[i]=max;
    }
    for(i=0;i<arrLen;i++)
    {
        res+=(fmin(a[i],b[i])-arr[i]);  // 取两次最大值的最小值与 arr 元素相减就是该元素位置接到的雨水,加入结果中
    }
    return res;
}