【题解】「JOISC 2021 Day2」道路建设
提供一个二分 + set 的做法。
首先二分一个距离 m i d mid mid ,考虑距离 ≤ m i d \leq mid ≤mid 的点对个数,此时合法点对的个数 ≤ K \leq K ≤K 。得到答案后,再将所有距离 ≤ m i d − 1 \leq mid-1 ≤mid−1 的方案都构造出来,最后输出若干个 m i d mid mid 占位。
我们来考虑直接做这道题,类似于天使玩偶,可以分两个点的位置进行讨论,内部用树状数组求答案,是一个三维偏序的经典问题 (天使玩偶),时间复杂度 O ( n l o g 3 n ) O(nlog^3n) O(nlog3n) 。
这里有一个有用的剪枝,就是当找到 K K K 个点对后,可以直接返回 f a l s e false false ,但是 c d q cdq cdq 的复杂度仍然是 O ( n l o g 2 n ) O(nlog^2n) O(nlog2n) 。
下面提供一个 O ( n l o g 2 n ) O(nlog^2n) O(nlog2n) 的做法,即不会找超过 K K K 个点对,内部用一个带 l o g log log 的 s e t set set 维护。
事实上这道题 可以转化为二维偏序。这是一个非常重要的思想,因为求没有重复元素的三维点对时也可以用二维偏序来计算。
考虑定义 a i = x i + y i a_i=x_i+y_i ai=xi+yi, b i = x i − y i b_i=x_i-y_i bi=xi−yi,点对的新距离为 m a x ( a b s ( a i − a j ) , a b s ( b i − b j ) ) max(abs(a_i-a_j),abs(b_i-b_j)) max(abs(ai−aj),abs(bi−bj)) 。这其实是一个等价转换。然而不同的是,我们去掉了 x i < x j x_i<x_j xi<xj 的限制。
那么我们只需要按照 a i a_i ai 从小到大排序,后面的减去前面的就可以消去绝对值,而后面那个可以直接在 ( b i − K , b i + K ) (b_i-K,b_i+K) (bi−K,bi+K) 的范围内查找,即在 s e t set set 里进行二分查找。
这个方法时间复杂度 O ( n l o g 2 n ) O(nlog^2n) O(nlog2n) ,巧妙运用了绝对值和 m a x max max 函数的性质。
__EOF__

本文链接:https://www.cnblogs.com/cqbzly/p/17530335.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」