TAG- 二分 二分 二分时间复杂度- O ( N ∗ l o g N ) O(N \ast log N) O(N∗logN)
//
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+6;
int x[N],y[N];
int n,k;
bool f( int mid )
{
int cnt=0;
for( int i=1;i<=n/2;i++ )
{
cnt+=max( 0LL,x[n-i+1]-x[i]-mid );
cnt+=max( 0LL,y[n-i+1]-y[i]-mid );
}
return cnt<=k ;
}
void solve()
{
scanf("%lld%lld",&n,&k );
for( int i=1;i<=n;i++ ) scanf("%d%d",&x[i],&y[i] );
sort( x+1,x+n+1 );
sort( y+1,y+n+1 );
int L=0,R=1e9;
while( L<R )
{
int mid=( L+R )>>1;
if( f(mid) ) R=mid;
else L=mid+1;
}
printf("%lld\n",L );
}
signed main()
{
int t=1;
// scanf("%lld",&t );
while( t-- ) solve();
return 0;
}
实现细节
- 无
参考示意图
- 无
参考链接
作者 | 乐意奥AI
文章描述了一个使用二分查找算法解决F-MinimizeBoundingSquare问题的过程,该问题涉及在一个给定的二维坐标中找到最小的边长,使得最多k对点之间的距离超过这个边长。时间复杂度为O(N*logN)。
4万+

被折叠的 条评论
为什么被折叠?



