题解
题目分析
每个基站真正用到的,只有左右两侧「最近的、严格更大」的那一座。窗口长度 k 只用来过滤距离:若最近更大元素的距离已经超过 k,窗口里不可能再有更大的值,该侧贡献就是 0。
- 用单调栈求出 nge_left[i]:下标 i 左侧最近且 power 严格更大的位置;不存在则为 −1。从左到右扫描,栈中下标对应的强度保持严格递减,栈顶就是当前的最近更大候选。
- 再用单调栈求出 nge_right[i]:下标 i 右侧最近且严格更大的位置。从左到右扫描,若当前强度大于栈顶,则当前就是栈顶元素的右侧第一个更大。
- 对每个 i,若 i−nge_left[i]≤k,累加 power[i]×(i−nge_left[i]);右侧同理。乘积可能达到 1014,需要用 64 位整数,并且每步对 109+7 取模。