<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:
    def maxDistance(self, arrays: List[List[int]]) -> int:

        # naive approach     
        '''    
        ans = 0
        for i in range(len(arrays)):
            for j in range(len(arrays)):
                if i == j:
                    continue
                else:
                    ans = max(ans,arrays[j][-1] - arrays[i][0])
        return ans
        '''
        # think like this-->
        '''
        We want the global minimum and global maximum efficiently..
        Now, we know that global minimum and global maximum are at first and last position.
        Just one thing that both the global minimum and maximum must not be from same array
        '''
        global_minimum = arrays[0][0]
        global_maximum = arrays[0][-1]
        ans = 0
        for i in range(1,len(arrays)):
            arr = arrays[i]

            ans = max(ans,arr[-1] - global_minimum,global_maximum-arr[0])

            global_minimum = min(global_minimum,arr[0])
            global_maximum = max(global_maximum,arr[-1])
        return ans

        
            
43440