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