<p>You are given <code>m</code> <code>arrays</code>, where each array is sorted in <strong>ascending order</strong>.</p>

<p>You can pick up two integers from two different arrays (each array picks one) and calculate the distance. We define the distance between two integers <code>a</code> and <code>b</code> to be their absolute difference <code>|a - b|</code>.</p>

<p>Return <em>the maximum distance</em>.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> arrays = [[1,2,3],[4,5],[1,2,3]]
<strong>Output:</strong> 4
<strong>Explanation:</strong> One way to reach the maximum distance 4 is to pick 1 in the first or third array and pick 5 in the second array.
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> arrays = [[1],[1]]
<strong>Output:</strong> 0
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>m == arrays.length</code></li>
	<li><code>2 &lt;= m &lt;= 10<sup>5</sup></code></li>
	<li><code>1 &lt;= arrays[i].length &lt;= 500</code></li>
	<li><code>-10<sup>4</sup> &lt;= arrays[i][j] &lt;= 10<sup>4</sup></code></li>
	<li><code>arrays[i]</code> is sorted in <strong>ascending order</strong>.</li>
	<li>There will be at most <code>10<sup>5</sup></code> integers in all the arrays.</li>
</ul>

class Solution {
public:
    int maxDistance(vector<vector<int>>& arrays) {
        int n = arrays.size();
        int prefMin[n];
        int prefMax[n];
        int suffMin[n];
        int suffMax[n];
        prefMin[0]=arrays[0][0];
        prefMax[0]=arrays[0][arrays[0].size()-1];
        for(int i=1;i<n;i++){
            prefMin[i] = min(prefMin[i-1],arrays[i][0]);
            prefMax[i] = max(prefMax[i-1],arrays[i][arrays[i].size()-1]);
        }
        suffMin[n-1] = arrays[n-1][0];
        suffMax[n-1] = arrays[n-1][arrays[n-1].size() -1];
        for(int i=n-2;i>=0;i--){
            suffMin[i] = min (suffMin[i+1],arrays[i][0]);
            suffMax[i] = max (suffMax[i+1],arrays[i][arrays[i].size()-1]);
        }
        int ans = -1;
        int INF = -1e5;
        for(int i=0;i<n;i++){
            int val1=INF,val2=INF,val3=INF,val4=INF,valMax;
            if(i>0){ 
                val1 = abs(arrays[i][0]-prefMax[i-1]);
                val3 = abs (arrays[i][arrays[i].size()-1] - prefMin[i-1]);
            }
            if(i<n-1){
             val2 = abs (arrays[i][0]-suffMax[i+1]);
             val4 = abs (arrays[i][arrays[i].size()-1] - suffMin[i+1]);
            }
             valMax = max(max(val1,val2),max(val3,val4));
            ans = max(ans, valMax);
        }
        return ans ;
    }
};
109528