切比雪夫距离
定义
设二维平面中的两点 \(A(x_1,y_1)\),\(B(x_2,y_2)\),定义它们之间的切比雪夫距离为
切比雪夫距离与曼哈顿距离
思考一下两者的联系。
\(A\) 和 \(B\) 的曼哈顿距离:
这是 \((x_1+y_1,x_1-y_1)\) 和 \((x_2+y_2,x_2-y_2)\) 的切比雪夫距离。
这说明切比雪夫坐标系是由曼哈顿坐标系旋转 \(45^{\circ}\) 后放大一倍得到的。同理:
- 曼哈顿坐标系是通过切比雪夫坐标系旋转 \(45^\circ\) 后再缩小为一半得到的。
\(A\) 和 \(B\) 的切比雪夫距离:
上面这个式子的正确性值得思考一下。
这是 \((\frac{x_1+y_1}{2},\frac{x_1-y_1}{2})\) 和 \((\frac{x_2+y_2}{2},\frac{x_2-y_2}{2})\) 的曼哈顿距离。
两者的相互转化
-
曼哈顿距离 \(\rightarrow\) 切比雪夫距离:\((x,y)\rightarrow(x+y,x-y)\)
-
切比雪夫距离 \(\rightarrow\) 曼哈顿距离:\((x,y)\rightarrow(\frac{x+y}{2},\frac{x-y}{2})\)
可惜的是在 \(D\ge 3\) 的时候切比雪夫距离不能转化为曼哈顿距离。
题目
P4648 [IOI2007] pairs 动物对数
给定 \(B\) 维曼哈顿坐标系上的 \(n\) 个整点,问满足 \(i<j,dis(i,j)\le D\) 的 \((i,j)\) 总数。
\(1\le B\le 3\),\(n\le 10^5\),\(D\le 10^8\).
保证点的坐标为正整数。记 \(m\) 为最大的坐标值。
-
\(B=1\),\(m\le 7.5\times 10^7\).
-
\(B=2\),\(m\le 7.5\times 10^4\).
-
\(B=3\),\(m\le 75\).
- \(B=1\)
双指针维护一下即可。时间复杂度 \(O(n)\).
- \(B=2\)
先曼转切,令 \((x,y)\leftarrow(x+y,x-y)\).
直观的来说就是对每个 \((x,y)\) 求左上角为 \((x-D,y-D)\),右下角为 \((x+D,y+D)\) 的子矩阵和 \(-1\).
以 \(x\) 为关键字排序,记录双指针 \(i,j\),用树状数组维护。
偏移量设为 \(m\) 即可。时间复杂度 \(O(n\log m)\).
- \(B=3\)
曼哈顿坐标系上的点可以转化为一个四元组,但是写起来太麻烦了。
不妨对 \(m=75\) 这个限制做一些暴力。
对 \((x,y,z)\) 的前二维曼转切,视为 \(z\) 平面上的点。
对于每个点 \((x_i,y_i,z_i)\),枚举另一个点的 \(z_j\),即求 \(z_j\) 平面上,左上角为 \((x_i-l,y_i-l)\),右下角为 \((x_i+l,y_i+l)\) 的子矩阵和 \(-[z_i=z_j]\).
对每个平面计算其二维前缀和,时间复杂度 \(O(m^3+nm)\).
此时计算的点对总数应 \(/2\).
P3964 [TJOI2013] 松鼠聚会
给出切比雪夫坐标系上的 \(n\) 个整点,找到一个点满足其与其他点的总距离最小,输出这个值。
\(n\le 10^5\),\(|x|,|y|\le 10^9\).
切转曼,对于点 \(j\),求和式即
只考虑 \(x\),可以拆成
容易发现就是前缀和。时间复杂度 \(O(n\log n)\).
P2906 [USACO08OPEN] Cow Neighborhoods G
对曼哈顿坐标系上距离 \(\le C\) 的点对连边,问总连通块数与最大块的大小。
\(n\le 10^5\),\(1\le C,x_i,y_i\le 10^9\).
曼转切后点对连边即 \(\max(|x_1-x_2|,|y_1-y_2|)\le C\).
以 \(x_i,y_i\) 分别为第一、二关键字从小到大排序。
用 set 维护 \(y_i\) 的值,插入 \(i\) 是先删除所有 \(|x_i-x_j|>C\) 的 \(y_j\),在 set 里找到第一个 \(\ge y_i\) 的点,若合法将它们合并,同理可以找到第一个 \(\le y_i\) 的点将它们并 merge 起来。
这样做容易发现 \(y_i\) 会按照大小顺序不断合并,时间复杂度 \(O(n\alpha(n)+n\log n)\).
P8075 [COCI2009-2010#7] KRALJEVI
求出 \(n\times m\) 的网格中若干点之间的切比雪夫距离之和。
\(n,m\le 10^3\).
直接使用松鼠聚会的方法即可,最后将答案 \(/2\),也就是应该 \(/4\).
时间复杂度 \(O(n^2\log^2 n)\).
P3439 [POI2006] MAG-Warehouse
给定若干三元组 \((x,y,t)\),表示 \((x,y)\) 处有 \(t\) 个点,求一个整点,最小化到这 \(\sum t_i\) 个点的切比雪夫距离。
输出横纵坐标最大的那个。
\(n\le 10^5\),\(1\le x,y\le 5\times 10^8\),\(1\le t\le 10^6\).
切转曼后对 \(x\) 和 \(y\) 分别取中位数 \(mid\) 即可。
最后要将坐标转换回来,不妨把 \(mid-1,mid,mid+1\) 的值全部计算一次。
[ABC233Ex] Manhattan Christmas Tree
给出曼哈顿坐标系上的 \(n\) 个整点。
\(q\) 次询问,每次询问与 \((a_i,b_i)\) 与离它第 \(k_i\) 近的点的距离。
\(1\le k_i\le n\le 10^5\),\(1\le q\le 10^5\),\(0\le x_i,y_i\le 10^5\).
曼转切。
按 \(x\) 构建主席树不断插入 \(y\),二分答案值,在主席树上跑即可。
\(y\) 的值域应为 \(\rm [-1e5,1e5]\),加上偏移量。
Four Coloring
给 \(n\times m\) 的网格用 RYGB 上色,使得曼哈顿距离为 \(d\) 的格子颜色不同。
\(n,m\le 500\),\(1\le d\le n+m-2\).
在切比雪夫坐标系上应为若干斜着的 \(d\times d\) 的正方形,单个正方形内的点互不影响,相邻的正方形染上不同的颜色可以视为合法的方案。
然后发现这个东西跟奇偶性有关。
所以在原网格上,把每个点曼转切,判断它在所在的块行列的奇偶性,有 \(4\) 种情况,分别用 RYGB 覆盖即可。
[ARC065E] へんなコンパス
给出曼哈顿坐标系上的 \(n\) 个点,有一个指南针指向其中的两个点,状态记为 \(P(a,b)\).(无序点对)
若点 \(x\) 满足 \(dis(a,x)=dis(a,b)\),指南针的状态可以变为 \(P(a,x)\),对于 \(b\) 同理。
问指南针共有多少不同的状态。
\(n\le 10^5\),\(1\le x_i,y_i\le 10^9\).
在曼哈顿坐标系上,每次的转移都是一个斜着的正方形,不是很好做。
曼转切,那么能转移应有:
或者
对各点排序后容易二分查找,要减掉两个都为 \(dis\) 的情况。
考虑统计答案,对于合法点对将两点连边。
得到合法区间后,将该区间内的点两两相连并向 \((x_a,y_a)\) 连边。
维护每个点的出度,与初始点 \(a\) 连通的即为合法方案。
P6526 「Wdoi-1」四重存在
在平面直角坐标系上支持如下操作:
- 新增点 \(i\)(下标从 \(1\) 开始),用 \((x_i,y_i,v_i)\) 表示。
- 查询两点间的距离最大值
- 查询忽略某个点后两点间的距离最大值
同时定义 \(u,v\) 间的距离 \(\operatorname{dis}(u,v)=|x_u-x_v|+|y_u-y_v|+v_{\max(u,v)}\)。
\(q\le 2\times 10^6\),值域 \([-10^8,10^8]\),强制在线。
在不断加点的过程中维护要求的东西。
转为切比雪夫距离,令 \((x,y)\rightarrow(x+y,x-y)\),钦定 \(a<b\),则 \(\operatorname{dis}(a,b)=\max(|x_a-x_b|,|y_a-y_b|)+v_b\)。
当 \(b\) 固定时,最大化 \(\operatorname{dis}(a,b)\) 的 \(a\) 一定满足 \(x_a\) 或 \(y_a\) 取全局极值或次极值。
于是加点的时候,在四个方向上可以维护出八个点的信息。
如果 \(x\not=a\) 且 \(x\not=b\),那么 \((a,b)\) 可以对 \(x\in[1,a-1]\cup[a+1,b-1]\cup[b+1,n]\) 处的答案形成 \(\operatorname{dis}(a,b)\) 的贡献。发现有用的 \((a,b)\) 数量是 \(O(n)\) 的,线段树即可。
时间复杂度 \(O(n\log n)\)。