You are given an integer array nums and an integer p.
You are also given a 2D integer array queries, where each queries[i] = [vali, ki] and the difference between consecutiveki values is always less than 10.
For each query:
Insert vali into nums.
Let x be the kithlargest element in the current nums.
Updatep to px % (109 + 7).
Return an array ans where the ans[i] represents the value of p after processing the ith query.
Β
Example 1:
Input:nums = [2], p = 4, queries = [[3,1],[1,2]]
Output:[64,4096]
Explanation:
i
vali
Current nums
ki
kith largest
p
New p = pk % (109 + 7)
0
3
[2, 3]
1
3
4
43 % (109 + 7) = 64
1
1
[2, 3, 1]
2
2
64
642 % (109 + 7) = 4096
Thus, ans = [64, 4096].
Example 2:
Input:nums = [7,5], p = 6, queries = [[4,3],[7,2]]
Output:[1296,220296870]
Explanation:
i
vali
Currentβββββββ nums
ki
kith largest
p
New p = pk % (109 + 7)
0
4
[7, 5, 4]
3
4
6
64 % (109 + 7) = 1296
1
7
[7, 5, 4, 7]
2
7
1296
12967 % (109 + 7) = 220296870
Thus, ans = [1296, 220296870]
Β
Constraints:
1 <= nums.length <= 2 Γ 104
1 <= nums[i] <= 106
βββββββ1 <= p <= 106
1 <= queries.length <= 2 Γ 104
βββββββ1 <= vali <= 106
1 <= ki <= n + i + 1
|ki - ki - 1| < 10 for i > 0
Solutions
Solution 1: Two Sorted Sets
We use two sorted sets, \(l\) and \(r\), to maintain the current array \(nums\). All elements in \(l\) are less than or equal to those in \(r\), and the number of elements in \(r\) is equal to \(k_i\).
For each query, we insert \(val_i\) into \(r\), then move the smallest element in \(r\) to \(l\) until the size of \(r\) becomes \(k_i\). At this point, the smallest element in \(r\) is the \(k_i\)-th largest element in the current \(nums\). We then use fast exponentiation to update \(p\) as \(p^x \bmod (10^9 + 7)\), and append the updated \(p\) to the answer array.
The time complexity is \(O((n + m) \log (n + m))\), and the space complexity is \(O(n + m)\), where \(n\) and \(m\) are the lengths of \(\textit{nums}\) and \(\textit{queries}\), respectively.
We use a sorted list \(\textit{sl}\) to maintain the current array \(nums\). For each query, we insert \(val_i\) into \(\textit{sl}\), then find the \(k_i\)-th largest element \(x\) in \(\textit{sl}\). Using fast exponentiation, we update \(p\) to \(p^x \bmod (10^9 + 7)\), and append the updated \(p\) to the answer array.
The time complexity is \(O((n + m) \log (n + m))\), and the space complexity is \(O(n + m)\), where \(n\) and \(m\) are the lengths of \(\textit{nums}\) and \(\textit{queries}\), respectively.