P1102 A-B 数对
题意
给出一串数以及一个数字 C,要求计算出所有 A - B = C 的数对的个数(不同位置的数字一样的数对算不同的数对)。
1 ≤ N ≤ 2 × 1 0 5 1≤N≤2×10^5 1≤N≤2×105
思路
将式子变形可得 A - C = B ,那么我们就可以将 B 中每个数出现的次数插入到map里面,然后对于每一个 A - C ,在map中找其出现的次数,累加到最终答案。
或者,我们可以在对B排序,在 B 中找到 A - C 的左右边界,做差后累加到最终答案
亦或者,在排完序之后,对这个有序序列,我们可以使用双指针算法,维护两个右端点 r 1 , r 2 r1 , r2 r1,r2 , 每次 r 1 r1 r1 右移到 a [ r 1 ] − a [ l ] < c a[r1] - a[l] < c a[r1]−a[l]<c 的最后位置的下一位,r2 右移到满足 a [ r 2 ] − a [ l ] < = c a[r2] - a[l] <= c a[r2]−a[l]<