#include <iostream>
using namespace std;

long long trappingWater(int arr[], int n){
        int *Lmax = new int[n];
        int *Rmax = new int[n];
        
        Lmax[0] = arr[0];
        for(int i = 1; i<n; i++)
        {
            int temp = max(arr[i],Lmax[i-1]);
            Lmax[i] = temp;
        }
        
        Rmax[n-1] = arr[n-1];
        for(int i = n-2; i>=0; i--)
        {
            int temp = max(arr[i],Rmax[i+1]);
            Rmax[i] = temp;
        }
        long long water = 0;
        for(int i = 1; i<n-1; i++)
        {
            water = water+ min(Lmax[i],Rmax[i]) - arr[i];
        }
        return water;
    }
    
int main() {
    int arr[] = {3,0,0,2,0,4};
    int n = sizeof(arr)/sizeof(arr[0]);
    long long x = trappingWater(arr,n);
    cout<<"Tapping water: "<<x<<endl;

    return 0;
} 
by