Given an array A of integers, a ramp is a tuple (i, j) for which i < j and A[i] <= A[j]. The width of such a ramp is j - i. Find the maximum width of a ramp in A. If one doesn't exist, return 0.


Example 1:

Input: [6,0,8,2,1,5]
Output: 4

Explanation: 

The maximum width ramp is achieved at (i, j) = (1, 5): A[1] = 0 and A[5] = 5.

Example 2:

Input: [9,8,1,0,1,9,4,0,4,1]
Output: 7

Explanation: 

The maximum width ramp is achieved at (i, j) = (2, 9): A[2] = 1 and A[9] = 1.


Note:

2 <= A.length <= 50000
0 <= A[i] <= 50000


Solution in C++

class Solution {
public:
    int maxWidthRamp(vector<int>& A) {
        int n=A.size();

        vector<pair<int,int>> my;
        for(int i=0; i<n; i++) my.push_back({A[i],i});
        sort( my.begin(), my.end());
        
        int max_width=0;
        int i=0;
        int j=1;
        while(j<n) {
            if (my[i].second<my[j].second) {
                max_width = max( max_width, my[j].second-my[i].second);
                j++;
            }
            else i++;
            
            if (i==j) j++;
        }
        
        return max_width;
    }
};