解题思路
在新题面中,对于每个能量值 v,它在序列中的出现位置从小到大排列为 p1<p2<⋯<pm,相邻两个位置 (pk,pk+1) 构成一个同频紧邻对。该对的低值干扰数定义为区间 [pk,pk+1] 内能量值严格小于 v 的频点个数。要求所有同频紧邻对的低值干扰数之和。
直接对每个同频紧邻暴力统计是 O(n2) 的,无法通过。我们需要高效计算任意区间内 “严格小于 v 的元素个数” 。
观察:如果我们按能量值从小到大的顺序逐步处理,那么处理到值 v 时,所有能量值严格小于 v 的频点都已经被“处理过”,而能量值 ≥v 的频点尚未处理。因此,若能快速统计某个区间内已经处理过的元素个数,就得到了该区间内“严格小于 v 的元素个数”。
基于此,我们可以设计如下算法: