The tricky part: coordinate compression must include both and values.
def reversePairs(nums):
# Collect all values needed
all_vals = set(nums)
for x in nums:
all_vals.add(2 * x)
sorted_vals = sorted(all_vals)
rank = {v: i+1 for i, v in enumerate(sorted_vals)}
n = len(sorted_vals)
tree = [0] * (n + 1)
result = 0
for num in nums:
# Query: count of elements where 2*elem < num
# i.e., elements with rank < rank[num]
r = rank[num]
result += query(r - 1)
# Update: add 2*num to track for future elements
update(rank[2 * num])
return result
Wait—you need to think more carefully. Process left to right, query for .