信息
- ID
- 1575
- 时间
- 2000ms
- 内存
- 1024MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者
对值 x,记它在初始排列左侧比它大的元素个数为 invx。
一次覆盖到 x 的前缀冒泡操作会让其中一个较大元素越过 x,所以只要其贡献仍为正,它对总逆序数的贡献就恰好减少 1。由于 A 非降,若 x 的初始位置为 posx,它从第一个满足 Ai≥posx 的操作起会一直被覆盖,因此贡献会在一段连续的操作编号上逐次减一。
用树状数组按初始排列顺序求出全部 invx 与初始逆序数,用二分查找求每个值首次被覆盖的编号,再在这段连续编号上对“本次减少量”做差分。
前缀累加差分并从当前逆序数中扣除即可依次输出答案,时间复杂度为 O(NlogN+NlogM+M),空间复杂度为 O(N+M)。