给定n个点,求出一个点使得其他点到该点的切比雪夫距离和最小,输出这个答案。
切比雪夫距离是取max的,不好计算。我们可以转化成曼哈顿距离,然后求和。对x,y两个坐标分开计算距离。
曼哈顿距离是绝对值,要分类讨论,然后用前缀和优化下即可
const int N = 1e5 + 79;
lxl ans(1e18);
int n;
lxl x[N], y[N];
lxl sx[N], sy[N];
struct point {
lxl x, y;
} p[N];
int main() {
read(n);
rep(i, 1, n) {
int a,b;
read(a);
read(b);
x[i] = p[i].x = a+b;
y[i] = p[i].y = a-b;
}
std::sort(x + 1, x + n + 1);
std::sort(y + 1, y + n + 1);
rep(i, 1, n) {
sx[i] = sx[i - 1] + x[i];
sy[i] = sy[i - 1] + y[i];
}
rep(i, 1, n) {
lxl posx = std::lower_bound(x + 1, x + n + 1, p[i].x) - x;
lxl posy = std::lower_bound(y + 1, y + n + 1, p[i].y) - y;
lxl temp(0);
temp += posx * p[i].x - sx[posx] + (sx[n] - sx[posx]) - (n - posx) * p[i].x;
temp += posy * p[i].y - sy[posy] + (sy[n] - sy[posy]) - (n - posy) * p[i].y;
ans = min(ans, temp);
}
out(ans >> 1, '
');
return 0;
}