周赛:满足不等式的数对数目

6198. 满足不等式的数对数目

 

这里给出三种思路:「二分」「翻转对」「线段树」

二分

nums1[i] - nums1[j] <= nums2[i] - nums2[j] + diff

上述不等式变形可得:nums1[i] - nums2[i] <= nums1[j] - nums2[j] + diff

nums1[i] - nums2[i]视为一个整体,用df[i]表示

对于一个df[i],需要在[0...i-1]中寻找一个j,使得df[j] - diff <= df[i]

翻转对

关于「翻转对」的详细介绍可见 详解归并排序及其应用

线段树

关于「线段树」的详细介绍和模版可见 线段树详解

根据范围:

所以nums1[i] - nums2[i] + diff的范围为-3 * 10^4 <= x <= 3 * 10^4

为了方便处理,我们将范围右移到正数区间,即右移-3 * 10^4