打卡记录
最大和查询(排序+单调栈上二分)
链接
大佬的题解
class Solution:def maximumSumQueries(self, nums1: List[int], nums2: List[int], queries: List[List[int]]) -> List[int]:ans = [-1] * len(queries)a = sorted(((a, b) for a, b in zip(nums1, nums2)), key=lambda p: -p[0])j = 0st = []for i, (x, y) in sorted(enumerate(queries), key=lambda p: -p[1][0]):while j < len(a) and a[j][0] >= x: # 下面只需关心 ay (a[j][1])ax, ay = a[j]while st and st[-1][1] <= ax + ay: # ay >= st[-1][0]st.pop()if not st or st[-1][0] < ay:st.append((ay, ax + ay))j += 1p = bisect_left(st, (y,))if p < len(st):ans[i] = st[p][1]return ans