class Solution:
    def maximumScore(self, A: List[int], k: int) -> int:
        """
        tc O(N) sc O(1)
        main idea: (greedy)based on condition i <= k <= j, k must exist within subarray, initial distance between i,j is 1  => two pointer problem, get the neighbour with larger value 
        """
        #idx  0 1 2 3 4 5 
        #    [1,4,3,7,4,5]
        #           ^
        #         <-lr->
        minv = A[k]
        res,n = 0,len(A)
        l,r = k,k   # dis(l,r) = 1
        while l > 0 or r <n-1: # not l >=0 or r <n 
            if (A[l-1] if l >0 else 0) > (A[r+1] if r+1 < n else 0 ) :
                l -= 1
            else:
                r += 1
            minv = min(minv,A[l],A[r])
            res = max(res,minv * (r-l +1))
        return res