传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3382
【题解】
套路题。
首先我们会发现曼哈顿距离不好处理,难道要写kdtree???
(kdtree真的可以写啊qwq)
曼哈顿距离转成切比雪夫距离。
(x,y) ==> (x+y, x-y),那么就把坐标分离了。
然后对于每个坐标单独排序后求最大的差即可。
# include <stdio.h> # include <string.h> # include <iostream> # include <algorithm> // # include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; typedef unsigned long long ull; const int M = 5e4 + 10; const int mod = 1e9+7; # define RG register # define ST static int n; int x[M], y[M], a[M], b[M]; int main() { cin >> n; for (int i=1; i<=n; ++i) scanf("%d%d", x+i, y+i); for (int i=1; i<=n; ++i) a[i] = x[i] + y[i], b[i] = x[i] - y[i]; sort(a+1, a+n+1); sort(b+1, b+n+1); printf("%d ", max(a[n]-a[1], b[n]-b[1])); return 0; }