平面点对问题,切比雪夫距离

该博客讨论了一种平面点对问题,其中需要找出所有距离不小于d的点对。通过将曼哈顿距离转换为切比雪夫距离,可以将问题简化为计算固定大小正方形内的点数。博主提出使用排序和树状数组的方法来高效解决这一问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

给定平面的n个点(n<=1e5),所有坐标的绝对值在50000以内,现在问你有多少对点之间的距离不小于d。这里距离描述为两点的曼哈顿距离,即dist=|xi-xj|+|yi-yj|。

思路

如果将平面上小于等于d的曼哈顿距离画出来,会是一个菱形

 

切比雪夫距离:平面上两个点(x1,y1)(x2,y2)的切比雪夫距离为max⁡(∣x1−x2∣,∣y1−y2∣),其中∣x∣为x的绝对值

将曼哈顿距离转换为切比雪夫距离后,我们发现切比雪夫距离固定的点呈正方形

这样我们就可以先将数据离线,按照yy的大小对点进行排序,然后用树状数组维护长度为dd的正方形区域内点的个数即可,这部分代码相对就比较模板了

#include <bits/stdc++.h>
#define int long long
using namespace std;

const int maxn=1e6+10;
int n,d,fk;
const int fix=5e5+10;
struct Point{
    int x,y;
    bool operator < (const Point &rhs)const{
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值