找到关键性质:若 \(a_x \ge a_y \le a_z, |a_x - a_y| \ge k, |a_y -a_z|\ge k\),则 \(|a_x-a_z|\ge k\),这意味着子序列一定不增或不减,两个单独做即可,下面以单调不减为例。
考虑固定左端点如何计算答案,找到第一个 \(j\) 满足 \(a_l \le a_j \le a_i + k\),发现所有满足 \(a_r \ge a_j\) 的方案都在其中,剩下的是 \(a_r \in [a_i, a_j)\),对于这一部分一定满足 \(|a_r -a_l| \ge k\),于是只需要对这一部分计数即可。
找到 \(j\) 和求后缀内一段值域区间个数都可以线段树维护,复杂度 \(O(n \log n)\)。
submission