<p>You are given two integer arrays <code>nums1</code> and <code>nums2</code> both of the same length. The <strong>advantage</strong> of <code>nums1</code> with respect to <code>nums2</code> is the number of indices <code>i</code> for which <code>nums1[i] &gt; nums2[i]</code>.</p>

<p>Return <em>any permutation of </em><code>nums1</code><em> that maximizes its <strong>advantage</strong> with respect to </em><code>nums2</code>.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>
<pre><strong>Input:</strong> nums1 = [2,7,11,15], nums2 = [1,10,4,11]
<strong>Output:</strong> [2,11,7,15]
</pre><p><strong class="example">Example 2:</strong></p>
<pre><strong>Input:</strong> nums1 = [12,24,8,32], nums2 = [13,25,32,11]
<strong>Output:</strong> [24,32,8,12]
</pre>
<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= nums1.length &lt;= 10<sup>5</sup></code></li>
	<li><code>nums2.length == nums1.length</code></li>
	<li><code>0 &lt;= nums1[i], nums2[i] &lt;= 10<sup>9</sup></code></li>
</ul>

class Solution:
    def advantageCount(self, nums1: List[int], nums2: List[int]) -> List[int]:
        cur_val: int
        cur_ind: int
        nums1.sort(reverse=True)
        nums2[:] = [(value, index) for index, value in enumerate(nums2)]
        heapq.heapify(nums2)
        # ! 0 <= nums1[i], nums2[i] <= 10 ** 9 ! <- (-1) it's placeholder.
        out: list[int] = [-1 for _ in nums1]
        # Value which can't cover anything in `nums2`.
        not_covers: list[int] = []
        # All we care about is that we need to use the SMALLEST values from `nums1`
        #  to cover the SMALLEST values from `nums2`.
        while nums1:
            # Currently smallest in `nums2` and it's position.
            cur_val, cur_ind = nums2[0]
            cur_counter: int = nums1.pop()
            # If it's higher, then we can use it, and it's smallest so far.
            if cur_counter > cur_val:
                out[cur_ind] = cur_counter
                heapq.heappop(nums2)
            # Otherwise, we can place it on w.e place. Because it can't cover anything in `nums2`.
            else:
                not_covers.append(cur_counter)
        # Place all values which can't cover anything in `nums2` on empty spaces.
        for x in range(len(out)):
            if -1 == out[x]:
                out[x] = not_covers.pop()
        return out
36487