/* -*- coding: utf-8 -*- * * 3759.cc: No.3759 Watch Fireworks - yukicoder */ #include #include using namespace std; /* constant */ const int MAX_N = 300000; const long long LINF = 1LL << 40; /* typedef */ using ll = long long; /* global variables */ int xs[MAX_N], ys[MAX_N]; ll as[MAX_N], bs[MAX_N]; /* subroutines */ bool checksub(int n, ll d, ll a0, ll b0) { ll mina = LINF, maxa = -LINF, minb = LINF, maxb = -LINF; 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, ll d, ll mina, ll maxa, ll minb, ll 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]; ll mina = *min_element(as, as + n); ll maxa = *max_element(as, as + n); ll minb = *min_element(bs, bs + n); ll maxb = *max_element(bs, bs + n); ll d0 = -1, d1 = 2000000000LL; while (d0 + 1 < d1) { ll d = (d0 + d1) / 2; if (check(n, d, mina, maxa, minb, maxb)) d1 = d; else d0 = d; } printf("%lld\n", d1); return 0; }