class Solution:
    def shortestSubarray(self, A: List[int], k: int) -> int:
        """ tc O(N) sc O(N)
        main idea:  mono queue  (increasing)
        1. initialize queue with [0,-1] 
        2. if psum - queue[0] >= k,  update result 
        3. before insert current psum with index in the queue, remove elements from the tail that smaller than current psum 
        """
        res = float('inf')
        psum = 0 
        q = collections.deque()
        q.append([0,-1])# psumL, idx 
        for i, a in enumerate(A):
            psum += a
            while q and psum - q[0][0]  >= k:
                res = min(res, i - q.popleft()[1])
            
            while q and q[-1][0] >= psum:
                q.pop()
            q.append([psum, i])
        return res   if res < float('inf') else -1