题目内容
小红拿到一个长度为 n 的数组 {a1,a2,…,an} 。
她想要知道有多少个三元组 (i,j,k) 满足 max(ai−aj,aj−ak)=2×aj 。
请你帮她数一数。
思路
对固定中间位置j,记y=aj。令频次函数为f(x),并定义
- G(t):数组中≥t的元素个数,
- L(t):数组中≤t的元素个数。
由条件max(ai−aj,aj−ak)=2aj可拆分为两种达到最大值的方式,并用容斥合并:
- 当ai−aj=2aj时,ai=3y且aj−ak≤2y⇒ak≥−y,贡献为f(3y)⋅G(−y);