【题解】[GDKOI2021] 空中恋爱论

气象万千

思路

cdq 分治 + FFT。

首先意识到对和满足要求的区间计数,可以先求前缀和,再转化成前缀和的端点对计数。

An=i=1nai,Bn=i=1nbi.

那么对于一个点对 i,j(ij),如果 BjBi>0,就说明 (i,j] 是合法的区间。

现在的问题转化成统计 B 中的每一个点对。

这个问题看起来没有其他做法,考虑分治。

假设当前区间为 [l,r]. 我们需要统计的点对满足 0lil+r2<jrn,并且 BjBi>0。在此基础上,它会对 AjAi 的位置贡献 1.

那么先把数组按照 B 排序,保证分治时右半段区间的 B 之和大于等于左半段。然后把 [l,mid] 中的点值设为 Ai(mid,r] 中的点值设为 Aj. 只需要做一个无标号计数就行。随便 FFT 或者 NTT 带走。

考虑到每次都做 FFT 会浪费很多时间,考虑类似根号分治,当区间长度大于阈值时才 FFT。

阈值取 nlogn 最优,时间复杂度 O(nnlogn).

代码

posted @   kymru  阅读(40)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示
主题色彩