Problem with "Number List" problem from HackerRank

I’m trying to solve the Number List problem from HackerRank

Here’s what I did at first, but I was getting the error “time limit exceeded”:

def solve(a, k):
    N = len(a)
    # s_max contains the max elements of each contiguous subarray
    s_max=[max(a[i:i+j]) for i in range(0,N) for j in range(1,N-i+1)]
    s_max.sort()
     
    l = 0
    r = len(s_max)-1
    while True:
        mid = (r+l)//2
        if mid == l:
            return len(s_max)-r
        elif s_max[mid] <= k:
            l = mid
        else:
            r = mid

The double for loop thing while creating s_max was probably the problem here. For large lists a , this would take a lot of time.

The next thing I tried was this: for each number ‘n’ in array a , if it’s larger than k, find out in how many subarrays it is the maximum. It can be done by counting elements to the left of ‘n’ till I get something larger, and then doing the same thing on the right. Then the number of such subarrays where n>k and ‘n’ is the max = product of those two ‘left’ and ‘right’ numbers. This is my code:

def solve(a, k):
    N = len(a)
    if max(a) < k:  # no subarray will have a max > k
        return 0
    if k < min(a):  # all subarrays will have max > k
        return N*(N+1)//2
    cnt = 0
    for ind, val in enumerate(a):
        if val > k:
            # count subarrays where val > k and val=max(subarray) 
            # and val is the rightmost element
            j = ind-1
            left = 1
            while j >= 0 and a[j] <= val:
                left += 1
                j -= 1
             
            # count subarrays where val > k and val=max(subarray) 
            # and val is the leftmost element
            right = 1
            j = ind+1
            while j < N and a[j] <= val:
                right += 1
                j += 1
                 
            # total subarrays with max(subarray) > k 
            cnt += left * right    
    return cnt 

This did solve the problem of “time limit exceeded”, but in two test cases, I’m getting the error “Wrong Answer”. What am I doing wrong here?