传送门

考虑将曼哈顿距离转换成切比雪夫距离,这样问题就变成了max(∣x1−x2∣,∣y1−y2∣)≤dmax(|x_1-x_2|,|y_1-y_2|)\le dmax(∣x1​−x2​∣,∣y1​−y2​∣)≤d,这个式子就很好看了,我们首先按照(x,y)(x,y)(x,y)排序,让后我们双指针控制∣xr−xl∣<=d|x_r-x_l|<=d∣xr​−xl​∣<=d,用multisetmultisetmultiset维护[l,r][l,r][l,r]内的yyy坐标,一开始比较暴力的想法就是找到[yr−d,yr+d][y_r-d,y_r+d][yr​−d,yr​+d]区间内的数,让后用并查集维护,但是这样显然是可以卡成O(n2)O(n^2)O(n2)的,仔细想一下,有必要遍历所有点吗?并没有,假设我们二分找到了≥yr−d\ge y_r-d≥yr​−d的第一个位置pospospos,那么不难发现[pos,pos+d][pos,pos+d][pos,pos+d]对应的数都已经合并到一个集合中了,并没有必要去遍历,所以我们只需要找yr−d,yr+1y_r-d,y_r+1yr​−d,yr​+1对应在multisetmultisetmultiset里面的位置即可。

复杂度O(nlogn)O(nlogn)O(nlogn)

#include<bits/stdc++.h>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define Mid (tr[u].l+tr[u].r>>1)
#define pb push_back
using namespace std;const int N=1000010,INF=0x3f3f3f3f,mod=1e9+7;
typedef long long LL;
typedef pair<int,int> PII;int n,d;
int p[N],se[N];
struct Point {int x,y;bool operator < (const Point &W) const {if(x!=W.x) return x<W.x;else return y<W.y;}
}a[N];int find(int x) {return  x==p[x]? x:p[x]=find(p[x]);
}void solve() {multiset<PII>s;scanf("%d%d",&n,&d);for(int i=1;i<=n;i++) {int x,y;scanf("%d%d",&x,&y);p[i]=i;a[i].x=x+y; a[i].y=x-y;}sort(a+1,a+1+n);for(int l=1,r=1;r<=n;r++) {s.insert({a[r].y,r});while(a[r].x-a[l].x>d) {s.erase(s.find({a[l].y,l}));l++;}int y=a[r].y;auto it=s.lower_bound({y-d,0});if(it!=s.end()) {PII u=*it;if(u.X<=y+d) {p[find(r)]=find(u.Y);it=s.lower_bound({y+1,0});if(it!=s.end()) {u=*it;if(u.X<=y+d) {p[find(r)]=find(u.Y);}}}}}int ans,mx;ans=0; mx=0;for(int i=1;i<=n;i++) {if(se[find(i)]==0) ans++;se[find(i)]++;mx=max(mx,se[find(i)]);}printf("%d %d\n",ans,mx);
}int main() {int _=1;while(_--) {solve();}return 0;
}
/**/

P2906 [USACO08OPEN]Cow Neighborhoods G 切比雪夫距离 + 并查集 + set相关推荐

  1. G. Columns Swaps(并查集)

    G. Columns Swaps 题目大意: 两行nnn列,一次操作可以交换同列两个数,要求最小操作次数使两行都是1−n1-n1−n的排列. 前置知识: 2-sat 思路: 每个数都要出现两次这是必要 ...

  2. Codeforces Gym 101194G Pandaria (2016 ACM-ICPC EC-Final G题, 并查集 + 线段树合并)

    题目链接  2016 ACM-ICPC EC-Final Problem G 题意  给定一个无向图.每个点有一种颜色. 现在给定$q$个询问,每次询问$x$和$w$,求所有能通过边权值不超过$w$的 ...

  3. bzoj 1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居(切比雪夫距离+multiset贪心+并查集)

    1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1092  S ...

  4. BZOJ 1604 [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居:队列 + multiset + 并查集【曼哈顿距离变形】...

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1604 题意: 平面直角坐标系中,有n个点(n <= 100000,坐标范围10^9) ...

  5. AT3557 Four Coloring 切比雪夫距离 + 四色构造

    传送门 由于曼哈顿距离在图上显示的是一个棱形,并不是很好看,所以我们将其旋转45°45°45°,转换成切比雪夫距离,这样就变成了一个正方形,正方形内部的点距离都不超过ddd,此时可以将正方形内部的点看 ...

  6. 简单粗暴理解与实现机器学习之K-近邻算法(三):距离度量、欧氏距离、曼哈顿距离、切比雪夫距离、闵可夫斯基距离、标准化距离、余弦距离、汉明距离、杰卡德距离、马氏距离

    K-近邻算法 文章目录 K-近邻算法 学习目标 1.3 距离度量 1 欧式距离**(Euclidean Distance):** 2 **曼哈顿距离(Manhattan Distance):** 3 ...

  7. 各种距离 欧式距离、曼哈顿距离、切比雪夫距离、闵可夫斯基距离、标准欧氏距离、马氏距离、余弦距离、汉明距离、杰拉德距离、相关距离、信息熵...

    1. 欧氏距离(Euclidean Distance) 欧氏距离是最容易直观理解的距离度量方法,我们小学.初中和高中接触到的两个点在空间中的距离一般都是指欧氏距离. 二维平面上点a(x1,y1)与b( ...

  8. K邻近算法概述、欧式距离、Scikit-learn使用 、kNN邻近算法距离度量、曼哈顿距离、切比雪夫距离、闵可夫斯基距离、标准化欧氏距离、余弦距离、汉明距离、杰卡德距离、马氏距离

    一.K-邻近算法概述 K邻近算(K Nearest Neighbor算法,KNN算法):如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别 ...

  9. 曼哈顿距离和切比雪夫距离链接

    存一下链接慢慢看 曼哈顿距离和切比雪夫距离 这个更清晰一些: 关于曼哈顿距离和切比雪夫距离 NN中常用的距离计算公式:欧式距离.曼哈顿距离.马氏距离.余弦.汉明距离

最新文章

  1. i18n and L10n
  2. USTC English Club Note20171013(2)
  3. 【LeetCode】172 - Factorial Trailing Zeroes
  4. centos6.8下安装破解quartus prime16.0以及modelsim ae安装
  5. mysql hdfs_MySQL数据库与HDFS的实时数据同步
  6. python项目开发实例-有趣的十个Python实战项目,让你瞬间爱上Python!
  7. 生态环境影响评价技术应用及典型实践案例分析
  8. 平板电脑的桌面计算机图标,苹果平板电脑桌面图标删除不了怎么办
  9. c/c++ 去掉空格函数
  10. python scipy 密度函数 分位数 累计函数计算p值 卡方检验 t检验 F检验 假设检验 AB实验 显著性检验
  11. python使用金山词霸的翻译功能
  12. Xcode隐藏SDK C、C++、Objective-C符号
  13. 2017_Generating high-quality crowd density maps using contextual pyramid cnns
  14. 小米平板2可以装鸿蒙系统,搞定LOL?Win10版小米平板2游戏性能实测
  15. 分块矩阵的逆矩阵的公式记忆方法
  16. spring resource对象注入是单例吗
  17. 程序员如何提升英语水平
  18. 用P、V操作解决进程同步问题的解题步骤
  19. JS如何改变元素内容?
  20. 基于 Sentinel-2 卫星数据的像元三分法模型

热门文章

  1. 字节跳动offer流程多长时间_字节跳动-运营实习生-面经实录(已Offer??)
  2. 我女朋友让我删前任,我明明删了她还是要分手...
  3. 剑桥大学的下午茶,为何能喝出六十位诺贝尔奖获得者?
  4. 深度学习与机器学习到底什么关系?
  5. 递归函数就兔子数C语言,【C语言】求斐波那契(Fibonacci)数列通项(递归法、非递归法)...
  6. mysql savepoint作用_savepoint原理
  7. 终端编译opengl程序编译运行_ubuntu编译opengl和demo之二(glfw版本)
  8. c语言程序设计稀土,稀土掺杂Tarkall-C合金多尺度设计及计算
  9. android fragmentstatepageradapter框架,安卓爬坑指南之FragmentStatePagerAdapter
  10. python常用函数和操作_python一条语句分析几个常用函数和概念 -