/* -*- coding: utf-8 -*- * * 3759.cc: No.3759 Watch Fireworks - yukicoder */ #include #include using namespace std; /* constant */ const int MAX_N = 300000; const int INF = (1U << 31) - 1; /* typedef */ using ll = long long; /* global variables */ int xs[MAX_N], ys[MAX_N]; int as[MAX_N], bs[MAX_N]; /* subroutines */ bool checksub(int n, int d, int a0, int b0) { int mina = INF, maxa = -1, minb = INF, maxb = -1; for (int i = 0; i < n; i++) if (as[i] < a0 || as[i] > a0 + d || bs[i] < b0 || bs[i] > b0 + d) { mina = min(mina, as[i]); maxa = max(maxa, as[i]); minb = min(minb, bs[i]); maxb = max(maxb, bs[i]); } return (maxa - mina <= d && maxb - minb <= d); } bool check(int n, int d, int mina, int maxa, int minb, int maxb) { return checksub(n, d, mina, minb) || checksub(n, d, mina, maxb - d) || checksub(n, d, maxa - d, minb) || checksub(n, d, maxa - d, maxb - d); } /* main */ int main() { int n; scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d%d", xs + i, ys + i); if (n <= 1) { puts("0"); return 0; } for (int i = 0; i < n; i++) as[i] = xs[i] + ys[i], bs[i] = xs[i] - ys[i]; int mina = *min_element(as, as + n); int maxa = *max_element(as, as + n); int minb = *min_element(bs, bs + n); int maxb = *max_element(bs, bs + n); int d0 = -1, d1 = 2000000000; while (d0 + 1 < d1) { int d = ((ll)d0 + d1) / 2; if (check(n, d, mina, maxa, minb, maxb)) d1 = d; else d0 = d; } printf("%d\n", d1); return 0; }