5533 2023. 07. 11 21:46:31 111 Drónfutár cpp14 Időlimit túllépés 65/100 597ms 34796 KiB
#include <bits/stdc++.h>
using namespace std;

#define pii pair<int, int>

#define rand() (rand() | rand() << 16)

#define LSB(x) ((x) & -(x))

struct Pt { int x, y; };

int c1(Pt p) { return - p.x + p.y; }
int c2(Pt p) { return + p.x - p.y; }
int c3(Pt p) { return - p.x - p.y; }
int c4(Pt p) { return + p.x + p.y; }

int d1(Pt p) { return + p.x + p.y; }
int d2(Pt p) { return + p.x + p.y; }
int d3(Pt p) { return - p.x + p.y; }
int d4(Pt p) { return - p.x + p.y; }

char* pi = new char[10000000];

unsigned int ru() {
    while (!isdigit(*pi)) {
        pi++;
    }
    int r = 0;
    while (isdigit(*pi)) {
        r *= 10;
        r += *pi - '0';
        pi++;
    }
    return r;
}

vector<Pt> v;

int cmpy(const void* _a, const void* _b) {
	Pt a = v[*(int*)_a];
	Pt b = v[*(int*)_b];
	if (a.y > b.y) {
		return -1;
    }
    else if (a.y < b.y) {
		return 1;
    }
    else {
		return 0;
    }
}

int cmpxl(const void* _a, const void* _b) {
	Pt a = v[*(int*)_a];
	Pt b = v[*(int*)_b];
	if (a.x < b.x) {
		return -1;
    }
    else if (a.x > b.x) {
		return 1;
    }
    else {
		return 0;
    }
}

int cmpxh(const void* _a, const void* _b) {
	Pt a = v[*(int*)_a];
	Pt b = v[*(int*)_b];
	if (a.x > b.x) {
		return -1;
    }
    else if (a.x < b.x) {
		return 1;
    }
    else {
		return 0;
    }
}

int cmp1(const void* _a, const void* _b) {
	Pt a = v[*(int*)_a];
	Pt b = v[*(int*)_b];
	int ca = c1(a);
	int cb = c1(b);
	if (ca < cb) {
		return -1;
    }
    else if (ca > cb) {
		return 1;
    }
    else {
		return 0;
    }
}

int cmp2(const void* _a, const void* _b) {
	Pt a = v[*(int*)_a];
	Pt b = v[*(int*)_b];
	int ca = c2(a);
	int cb = c2(b);
	if (ca < cb) {
		return -1;
    }
    else if (ca > cb) {
		return 1;
    }
    else {
		return 0;
    }
}

int cmp3(const void* _a, const void* _b) {
	Pt a = v[*(int*)_a];
	Pt b = v[*(int*)_b];
	int ca = c3(a);
	int cb = c3(b);
	if (ca < cb) {
		return -1;
    }
    else if (ca > cb) {
		return 1;
    }
    else {
		return 0;
    }
}

int cmp4(const void* _a, const void* _b) {
	Pt a = v[*(int*)_a];
	Pt b = v[*(int*)_b];
	int ca = c4(a);
	int cb = c4(b);
	if (ca < cb) {
		return -1;
    }
    else if (ca > cb) {
		return 1;
    }
    else {
		return 0;
    }
}

int main() {
    fread(pi, 10000000, 1, stdin);
//    fread(pi, 10000000, 1, fopen("be2.txt", "r"));
	int N = ru();
	v.resize(N);
	vector<vector<pii>> g(N);
	for (int i = 0; i < N; i++) {
		v[i].x = ru();
		v[i].y = ru();
		g[i].reserve(8);
	}
	vector<int> w(N);
	iota(w.begin(), w.end(), 0);
	vector<vector<int>> f(N + 1);
	vector<vector<int>> t(N + 1);
	// octant 1
	qsort(w.data(), w.size(), sizeof(int), cmpy);
	for (int i = 1; i <= N; i++) {
		int s = i - LSB(i);
		int e = i;
		f[i].assign(w.begin() + s, w.begin() + e);
		t[i].resize(e - s);
		qsort(f[i].data(), f[i].size(), sizeof(int), cmp1);
		for (int j = 0, m = 0; j < e - s; j++) {
			if (d1(v[f[i][j]]) < d1(v[f[i][m]])) {
				m = j;
			}
			t[i][j] = f[i][m];
		}
	}
	for (int i = 0; i < N; i++) {
		int l = i, h = N - 1;
		while (l != h) {
			int m = (l + h + 1) / 2;
			if (v[w[m]].y == v[w[i]].y) {
				l = m;
			}
			else {
				h = m - 1;
			}
		}
		int r = -1;
		for (int j = l; j > 0; j -= LSB(j)) {
			l = -1, h = f[j].size() - 1;
			while (l != h) {
				int m = (l + h + 1) / 2;
				if (c1(v[f[j][m]]) < c1(v[w[i]])) {
					l = m;
				}
				else {
					h = m - 1;
				}
			}
			if (l >= 0 && (r == -1 || d1(v[t[j][l]]) < d1(v[r]))) {
				r = t[j][l];
			}
		}
		if (r != -1) {
			int d = d1(v[r]) - d1(v[w[i]]);
			g[w[i]].push_back({r, d});
			g[r].push_back({w[i], d});
		}
	}
	// octant 4
	for (int i = 1; i <= N; i++) {
		int s = i - LSB(i);
		int e = i;
		qsort(f[i].data(), f[i].size(), sizeof(int), cmp4);
		for (int j = 0, m = 0; j < e - s; j++) {
			if (d4(v[f[i][j]]) < d4(v[f[i][m]])) {
				m = j;
			}
			t[i][j] = f[i][m];
		}
	}
	for (int i = 0; i < N; i++) {
		int l = i, h;
		int r = -1;
		for (int j = l; j > 0; j -= LSB(j)) {
			l = -1, h = f[j].size() - 1;
			while (l != h) {
				int m = (l + h + 1) / 2;
				if (c4(v[f[j][m]]) <= c4(v[w[i]])) {
					l = m;
				}
				else {
					h = m - 1;
				}
			}
			if (l >= 0 && (r == -1 || d4(v[t[j][l]]) < d4(v[r]))) {
				r = t[j][l];
			}
		}
		if (r != -1) {
			int d = d4(v[r]) - d4(v[w[i]]);
			g[w[i]].push_back({r, d});
			g[r].push_back({w[i], d});
		}
	}
	// octant 2
	qsort(w.data(), w.size(), sizeof(int), cmpxh);
	for (int i = 1; i <= N; i++) {
		int s = i - LSB(i);
		int e = i;
		copy(w.begin() + s, w.begin() + e, f[i].begin());
		qsort(f[i].data(), f[i].size(), sizeof(int), cmp2);
		for (int j = 0, m = 0; j < e - s; j++) {
			if (d2(v[f[i][j]]) < d2(v[f[i][m]])) {
				m = j;
			}
			t[i][j] = f[i][m];
		}
	}
	for (int i = 0; i < N; i++) {
		int l = i, h;
		int r = -1;
		for (int j = l; j > 0; j -= LSB(j)) {
			l = -1, h = f[j].size() - 1;
			while (l != h) {
				int m = (l + h + 1) / 2;
				if (c2(v[f[j][m]]) <= c2(v[w[i]])) {
					l = m;
				}
				else {
					h = m - 1;
				}
			}
			if (l >= 0 && (r == -1 || d2(v[t[j][l]]) < d2(v[r]))) {
				r = t[j][l];
			}
		}
		if (r != -1) {
			int d = d2(v[r]) - d2(v[w[i]]);
			g[w[i]].push_back({r, d});
			g[r].push_back({w[i], d});
		}
	}
	// octant 3
	qsort(w.data(), w.size(), sizeof(int), cmpxl);
	for (int i = 1; i <= N; i++) {
		int s = i - LSB(i);
		int e = i;
		copy(w.begin() + s, w.begin() + e, f[i].begin());
		qsort(f[i].data(), f[i].size(), sizeof(int), cmp3);
		for (int j = 0, m = 0; j < e - s; j++) {
			if (d3(v[f[i][j]]) < d3(v[f[i][m]])) {
				m = j;
			}
			t[i][j] = f[i][m];
		}
	}
	for (int i = 0; i < N; i++) {
		int l = i, h = N - 1;
		while (l != h) {
			int m = (l + h + 1) / 2;
			if (v[w[m]].x == v[w[i]].x) {
				l = m;
			}
			else {
				h = m - 1;
			}
		}
		int r = -1;
		for (int j = l; j > 0; j -= LSB(j)) {
			l = -1, h = f[j].size() - 1;
			while (l != h) {
				int m = (l + h + 1) / 2;
				if (c3(v[f[j][m]]) < c3(v[w[i]])) {
					l = m;
				}
				else {
					h = m - 1;
				}
			}
			if (l >= 0 && (r == -1 || d3(v[t[j][l]]) < d3(v[r]))) {
				r = t[j][l];
			}
		}
		if (r != -1) {
			int d = d3(v[r]) - d3(v[w[i]]);
			g[w[i]].push_back({r, d});
			g[r].push_back({w[i], d});
		}
	}
	int ans = 0;
	vector<bool> vis(N);
	set<pii> s;
	s.insert({0, 0});
	while (!s.empty()) {
        auto a = *s.begin();
        s.erase(s.begin());
        if (vis[a.second]) {
            continue;
        }
        vis[a.second] = true;
		ans = max(ans, a.first);
        for (auto p : g[a.second]) {
            if (!vis[p.first]) {
                s.insert({p.second, p.first});
            }
        }
    }
    cout << ans << endl;
	return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 1888 KiB
2 Időlimit túllépés 597ms 32872 KiB
subtask2 15/15
3 Elfogadva 7ms 4788 KiB
4 Elfogadva 7ms 5020 KiB
5 Elfogadva 7ms 5232 KiB
6 Elfogadva 7ms 5476 KiB
7 Elfogadva 3ms 5172 KiB
subtask3 15/15
8 Elfogadva 7ms 4788 KiB
9 Elfogadva 7ms 5020 KiB
10 Elfogadva 7ms 5232 KiB
11 Elfogadva 7ms 5476 KiB
12 Elfogadva 3ms 5172 KiB
13 Elfogadva 4ms 5660 KiB
14 Elfogadva 7ms 6176 KiB
15 Elfogadva 7ms 6256 KiB
16 Elfogadva 7ms 6456 KiB
17 Elfogadva 7ms 6564 KiB
subtask4 35/35
18 Elfogadva 7ms 4788 KiB
19 Elfogadva 7ms 5020 KiB
20 Elfogadva 7ms 5232 KiB
21 Elfogadva 7ms 5476 KiB
22 Elfogadva 3ms 5172 KiB
23 Elfogadva 4ms 5660 KiB
24 Elfogadva 7ms 6176 KiB
25 Elfogadva 7ms 6256 KiB
26 Elfogadva 7ms 6456 KiB
27 Elfogadva 7ms 6564 KiB
28 Elfogadva 7ms 6708 KiB
29 Elfogadva 171ms 22520 KiB
30 Elfogadva 270ms 31364 KiB
31 Elfogadva 275ms 31972 KiB
32 Elfogadva 142ms 34796 KiB
subtask5 0/35
33 Elfogadva 7ms 4788 KiB
34 Elfogadva 7ms 5020 KiB
35 Elfogadva 7ms 5232 KiB
36 Elfogadva 7ms 5476 KiB
37 Elfogadva 3ms 5172 KiB
38 Elfogadva 4ms 5660 KiB
39 Elfogadva 7ms 6176 KiB
40 Elfogadva 7ms 6256 KiB
41 Elfogadva 7ms 6456 KiB
42 Elfogadva 7ms 6564 KiB
43 Elfogadva 7ms 6708 KiB
44 Elfogadva 171ms 22520 KiB
45 Elfogadva 270ms 31364 KiB
46 Elfogadva 275ms 31972 KiB
47 Elfogadva 142ms 34796 KiB
48 Időlimit túllépés 547ms 28884 KiB
49 Időlimit túllépés 573ms 33480 KiB
50 Időlimit túllépés 568ms 33392 KiB
51 Időlimit túllépés 551ms 33484 KiB
52 Időlimit túllépés 568ms 33488 KiB