把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end

luogu P4631 [APIO2018] 选圆圈

题面传送门

这里有两种做法,一种差点被卡常,一种没写(

首先我们发现直接从两点间距离这个式子来看不是很好做,我们考虑其它做法。

这题有两个关键点,圆是从大到小删的,以及一个圆被删掉以后就不会去删其它的圆了。

考虑给每个圆外面套一个正方形,两个圆如果相交那么正方形肯定相交。那么一个粗浅的想法就是当我们第一步选了某个圆的时候,只遍历和它正方形相交的圆。

这个东西对吗?对的。考虑一个圆被遍历的最多次数。要遍历到这个圆,距离肯定在二倍半径内,而二倍半径内放比它大,并且互补相交的圆最多放 \(8\) 个,也就是说最多只能被遍历到 \(8\) 次,因此暴力遍历是正确的。

但是现在的问题变成怎么找和一个正方形相交的正方形,首先我们发现要找的正方形边长比去查询的正方形边长小,说明如果相交那么四个角一定有一个相交,现在就变成在线二维数点问题。

KDT?恭喜你白推了!你可以和直接KDT随机旋转获得一样的好成绩。

考虑扫描线,建立线段树,线段树每个节点上开个 set ,这样可以做到 \(O(n\log ^2n)\) 的复杂度,并且常数非常大!

划正方形的操作可以让人想到区间平面最近点对那题,那么差不多做就好了,时间复杂度也是 \(O(n\log ^2n)\) ,但是常数不大。

submission

posted @ 2023-03-15 07:25  275307894a  阅读(31)  评论(0)    收藏  举报
浏览器标题切换
浏览器标题切换end