题意背景
有一个关于向量大陆起源的传说,涉及两个整数 x 和 y。
很久以前,数组国王在数轴上 ∣x∣ 和 ∣y∣ 两个位置放下标记,占领了两点之间所有区域(包含端点),这片领地被命名为 数组大陆(Arrayland)。
多年以后,向量国王在数轴上 ∣x−y∣ 和 ∣x+y∣ 两个位置放下标记,占领了两点之间所有区域(包含端点),这片领地被命名为 向量大陆(Vectorland)。
传说成立的条件:数组大陆完全包含在向量大陆内部(允许端点重合)。
其中 ∣z∣ 表示 z 的绝对值。
问题描述
现在给出 n 个整数 a1,a2,…,an,求满足以下条件的无序数对 {x,y} 数量:
- x,y 是数组中两个不同元素;
- 把这两个数当作传说中的 x,y 时,满足:数组大陆被完全包含在向量大陆中。
数对是无序的,且两个元素必须取自数组、互不相同。
输入格式
第一行一个整数 n(2≤n≤2⋅105),表示候选数字个数。
第二行包含 n 个互不相同的整数 a1,a2,…,an(−109≤ai≤109)。
输出格式
输出合法无序数对的总数量。
样例输入 1
3
2 5 -3
样例输出 1
2
样例解释
数对 {2,5} 不合法:
- 数组大陆区间:[∣2∣,∣5∣]=[2,5]
- 向量大陆区间:[∣2−5∣,∣2+5∣]=[3,7]
区间 [2,3] 不在向量大陆内,不满足包含关系。
数对 {5,−3} 合法:
- 数组大陆:[∣5∣,∣−3∣]=[3,5]
- 向量大陆:[∣5−(−3)∣,∣5+(−3)∣]=[2,8]
[3,5] 完全包含在 [2,8] 中。
数对 {2,−3} 也合法,总共有 2 对。
样例输入 2
2
3 6
样例输出 2
1
样例解释
唯一数对 {3,6}:
- 数组大陆:[3,6]
- 向量大陆:[3,9]
数组大陆完全被包含,端点重合也算合法。
补充数学等价条件(方便解题)
设 u=∣x∣, v=∣y∣,不妨令 u≤v;
向量区间为 [∣x−y∣, ∣x+y∣]。
题目包含条件等价于:
∣x−y∣≤u且v≤∣x+y∣
进一步可化简为只和绝对值有关的判定式,排序后可用双指针/二分快速统计。