题目:link
首先距离的平方 =xi2+yi2+zj2−2yizj≤Rj2
执行以下操作:
Rj←Rj2−zj2
xi←xi2+yi2
yi←2yi
则问题变为对于一个特定的 i 求有多少个 j 满足 xj−ziyj≤Ri ,考虑随着 zi 的增大动态排序 xj−ziyj 。
直接解出 xi−tyi≤xj−tyj 对于 t 的范围,约定 yi≥yj ,事先按照 y 为第一关键字, x 为第二关键字排序。
离散化 z ,对于每个斜率值解出第一个 ≥ 它的 z 值和位置,可以把整个长为 2×109 的序列进行分块,块内无 z 则预处理,否则二分查找,复杂度是对的。