有2个圆圈,它们的中心是固定的,将作为输入给出。然后会有n个点,其x和y坐标作为输入。
最后,会有q个查询。对于每个查询,将给出两个圆的半径(让它们为r1和r2)。输出每个查询的第一个圆圈或第二个圆圈内的总点数。如果从点到中心的距离小于或等于圆的半径,则点位于圆内。
约束:n,q <= 10 ^ 6 r1,r2 <= 10 ^ 7并且对于每个坐标,| x |和| y | &lt; = 10 ^ 6
我正在寻找O(nlogn)或O(nlog ^ 2n)预处理,然后每个查询找到O(logn)算法。 每个查询的O(n)解决方案太慢了。任何想法如何破解这个?
答案 0 :(得分:4)
O(log 2 N)查询时间的解决方案。
X > r1 && Y > r2
中的点数。答案 1 :(得分:2)
让C1,C2成为磁盘的中心。设Pi,i = 1 ... n为点。设Qj,j = 1 ... q,为第j个查询,Qj =(qj1,qj2)。