public static void Main()
Console.WriteLine("Hello World");
int[] arr = {3,0,0,2,0,4};
int[] arr1 = {0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1};
Console.WriteLine(RainWater(arr));
Console.WriteLine(RainWater1(arr));
Console.WriteLine(RainWater2(arr1));
private static int RainWater(int[] arr)
int[] maxRight = new int[arr.Length];
for(int i = arr.Length-1;i>=0 ;i--)
if ( maxSeenSoFar < arr[i] )
maxRight[i] = maxSeenSoFar;
maxRight[i] = maxSeenSoFar;
for(int i =0;i<arr.Length ;i++)
rainwater += Math.Max(Math.Min(maxSeenLeft,maxRight[i])-arr[i],0);
if ( arr[i] > maxSeenLeft )
private static int RainWater1(int[] arr)
int[] right = new int[arr.Length];
int[] left = new int[arr.Length];
right[arr.Length-1] = arr[arr.Length-1];
for(int i = arr.Length-2;i>=0;i--)
right[i] = Math.Max(right[i+1],arr[i]);
for(int i=1;i<arr.Length-1;i++)
left[i] = Math.Max(left[i-1],arr[i]);
for (int i = 0; i < arr.Length; i++)
count += Math.Min(left[i],right[i]) - arr[i];
private static int RainWater2(int[] arr)
int left_max = 0, right_max = 0;
int lo = 0, hi = arr.Length-1;
result += left_max - arr[lo];
result += right_max - arr[hi];