To store minimum element in the range i to n
let suffix_min = new Array ( n ) ; suffix_min [ n - 1 ] = a [ n - 1 ] ; for ( let i = n - 2 ; i >= 0 ; i -- ) { suffix_min [ i ] = Math . min ( suffix_min [ i + 1 ] , a [ i ] ) ; } for ( let i = 0 ; i < n ; i ++ ) { let low = i + 1 , high = n - 1 , ans = - 1 ; while ( low <= high ) { let mid = Math . floor ( ( low + high ) / 2 ) ;