class Solution:
    def maxInWindows(self, nums, size):
        # write code here
        def insert(s, left, right, val):
            if len(s) == 0: 
                s.append(val)
                return
            if val <= s[left]:
                s.insert(0, val)
                return
            elif val >= s[right]:
                s.append(val)
                return

            while left <= right:
                mid = (left+right)//2
                if s[mid] >= val:
                    right = mid-1
                else:
                    left = mid+1

            s.insert(left, val)


        ans = []
        n = len(nums)

        heap = []
        for i in range(n):
            insert(heap, 0, len(heap)-1, nums[i])
            if len(heap) == size:
                ans.append(heap[-1])
                heap.remove(nums[i-size+1])



        return ans