【noi 模拟】口胡
4.30
城市地平线
枚举区间端点并令两个端点都是区间前 \(k\) 大,这样的区间和方案一一对应。直接计算仍然是困难的,考虑枚举第 \(k\) 大的位置并标记该位置和比该数大的位置,设有 \(x\) 个标记,该数为左数第 \(rk\) 个,那么以该数为端点的区间数为 \(\min(k,rk,x-k+1,x-rk+1)\)(左右各 \(k\) 个)
发现这是个关于 \(k\) 的一次函数,同时维护每个 \(k\) 对应的系数和常数,每个位置的贡献形式是对 \(O(1)\) 段 \(k\) 区间加,差分即可