#include #include #include using namespace std; #define MAXN 100000 int N; long long min_d, prefix_suma[MAXN+1], x, y; struct bod { long long u, v, d;} body[MAXN]; bool porovnej_u(const bod &k, const bod &l) { return k.u < l.u; } bool porovnej_v(const bod &k, const bod &l) { return k.v < l.v; } int main() { scanf("%d", &N); for (int i = 0; i < N; i++) { scanf("%lld%lld", &x, &y); body[i].u = x - y; body[i].v = x + y; } sort(body, body + N, porovnej_u); prefix_suma[0] = 0LL; //prefixový součet, prefix_suma[k] označuje součet prvků 0, ..., k-1 for (int i = 0; i < N; i++) prefix_suma[i+1] = prefix_suma[i] + body[i].u; for (int i = 0; i < N; i++) { body[i].d = i * body[i].u - prefix_suma[i]; body[i].d += (prefix_suma[N] - prefix_suma[i+1]) - (N - i - 1) * body[i].u; } sort(body, body + N, porovnej_v); prefix_suma[0] = 0LL; for (int i = 0; i < N; i++) prefix_suma[i+1] = prefix_suma[i] + body[i].v; for (int i = 0; i < N; i++) { body[i].d += i * body[i].v - prefix_suma[i]; body[i].d += (prefix_suma[N] - prefix_suma[i+1]) - (N - i - 1) * body[i].v; } min_d = body[0].d; for (int i = 1; i < N; i++) min_d = min(min_d, body[i].d); printf("%lld\n", min_d / 2); return 0; }