import java.util.*;


public class Solution {
    /**
     * max water
     * @param arr int整型一维数组 the array
     * @return long长整型
     */
    public long maxWater (int[] arr) {
        int maxValue = arr[0];
        int[] dp1 = new int[arr.length];
        //两端点无容积
        dp1[0] = 0;
        dp1[arr.length - 1] = 0;
		//从左到右,仅考虑左板时的最大容积
        for (int i = 1; i < arr.length - 1; i++) {
            if (arr[i] >= maxValue){
                maxValue = arr[i];
                dp1[i] = 0;
            }else {
                dp1[i] = maxValue - arr[i];
            }
        }
        //从右到左,仅考虑右板时的最大容积
        //每个位置二者的最小值即是当前位置的最大容量
        maxValue = arr[arr.length - 1];
        for (int i = arr.length - 2; i > 0; i--){
            if (arr[i] >= maxValue){
                maxValue = arr[i];
                dp1[i] = 0;
            }else {
                dp1[i] = Math.min(maxValue - arr[i], dp1[i]);
            }
        }
        return Arrays.stream(dp1).sum();
    }
}