5535 2023. 07. 12 12:40:53 111 Drónfutár cpp14 Futási hiba 65/100 458ms 66432 KiB
#include <bits/stdc++.h>
using namespace std;

#define pii pair<int, int>

#define LI (s * 2 + 1)
#define RI (s * 2 + 2)
#define LST (l)
#define LEN ((l + r) / 2)
#define RST ((l + r) / 2 + 1)
#define REN (r)
#define ASZ (r - l + 1)
#define LSZ (LEN - LST + 1)
#define RSZ (REN - RST + 1)

struct Pt { int x, y; };

int b1(Pt p) { return + p.y; 	   }
int b2(Pt p) { return + p.y - p.x; }
int b3(Pt p) { return - p.x; 	   }
int b4(Pt p) { return - p.x - p.y; }

int c1(Pt p) { return + p.x - p.y; }
int c2(Pt p) { return + p.x; 	   }
int c3(Pt p) { return + p.x + p.y; }
int c4(Pt p) { return + 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; }

int (* bv[])(Pt p) = {b1, b2, b3, b4};
int (* cv[])(Pt p) = {c1, c2, c3, c4};
int (* dv[])(Pt p) = {d1, d2, d3, d4};

int dist(Pt a, Pt b) { return abs(a.x - b.x) + abs(a.y - b.y); }

int main() {
//	ifstream fin("be2.txt");
//	cin.rdbuf(fin.rdbuf());
	int N;
	cin >> N;
	vector<Pt> v(N);
	for (int i = 0; i < N; i++) {
		cin >> v[i].x >> v[i].y;
	}
	vector<vector<pair<int, int>>> g(N);
	vector<int> w(N);
	iota(w.begin(), w.end(), 0);
	for (int q = 0; q < 4; q++) {
		sort(w.begin(), w.end(), [&](auto a, auto b) { return bv[q](v[a]) < bv[q](v[b]); });
		vector<int> u(N, -1);
		vector<vector<int>> st(N * 4);
		function<void(int, int, int)> seg = [&](int s, int l, int r) {
			if (l == r) {
				st[s].push_back(w[l]);
				return;
			}
			seg(LI, LST, LEN);
			seg(RI, RST, REN);
			st[s].resize(ASZ);
			int i = 0, j = 0, k = 0, m = -1;
			while (j < LSZ && k < RSZ) {
				int aj = st[LI][j];
				int ak = st[RI][k];
				if (cv[q](v[aj]) > cv[q](v[ak])) {
					if (m != -1 && (u[aj] == -1 || dv[q](v[m]) < dv[q](v[u[aj]]))) {
						u[aj] = m;
					}
					st[s][i] = aj;
					j++;
				}
				else {
					if (m == -1 || dv[q](v[ak]) < dv[q](v[m])) {
						m = ak;
					}
					st[s][i] = ak;
					k++;
				}
				i++;
			}
			while (j < LSZ) {
				int aj = st[LI][j];
				if (m != -1 && (u[aj] == -1 || dv[q](v[m]) < dv[q](v[u[aj]]))) {
					u[aj] = m;
				}
				st[s][i] = aj;
				j++;
				i++;
			}
			while (k < RSZ) {
				st[s][i] = st[RI][k];
				k++;
				i++;
			}
		};
		seg(0, 0, N - 1);
		for (int j = 0; j < N; j++) {
			int k = u[j];
			if (k != -1) {
				g[j].push_back({k, dist(v[j], v[k])});
				g[k].push_back({j, dist(v[j], v[k])});
			}
		}
	}
	int ans = 0;
	vector<bool> vis(N);
	priority_queue<pii, vector<pii>, greater<pii>> pq;
	pq.push({0, 0});
	while (!pq.empty()) {
        pii a = pq.top();
        pq.pop();
        if (vis[a.second]) {
            continue;
        }
        vis[a.second] = true;
		ans = max(ans, a.first);
        for (auto p : g[a.second]) {
            if (!vis[p.first]) {
                pq.push({p.second, p.first});
            }
        }
    }
    cout << ans << endl;
	return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 1880 KiB
2 Futási hiba 458ms 66432 KiB
subtask2 15/15
3 Elfogadva 6ms 3028 KiB
4 Elfogadva 6ms 3012 KiB
5 Elfogadva 7ms 3276 KiB
6 Elfogadva 6ms 3572 KiB
7 Elfogadva 4ms 3252 KiB
subtask3 15/15
8 Elfogadva 6ms 3028 KiB
9 Elfogadva 6ms 3012 KiB
10 Elfogadva 7ms 3276 KiB
11 Elfogadva 6ms 3572 KiB
12 Elfogadva 4ms 3252 KiB
13 Elfogadva 4ms 3620 KiB
14 Elfogadva 7ms 4084 KiB
15 Elfogadva 7ms 4268 KiB
16 Elfogadva 7ms 4560 KiB
17 Elfogadva 7ms 4800 KiB
subtask4 35/35
18 Elfogadva 6ms 3028 KiB
19 Elfogadva 6ms 3012 KiB
20 Elfogadva 7ms 3276 KiB
21 Elfogadva 6ms 3572 KiB
22 Elfogadva 4ms 3252 KiB
23 Elfogadva 4ms 3620 KiB
24 Elfogadva 7ms 4084 KiB
25 Elfogadva 7ms 4268 KiB
26 Elfogadva 7ms 4560 KiB
27 Elfogadva 7ms 4800 KiB
28 Elfogadva 7ms 4708 KiB
29 Elfogadva 108ms 18604 KiB
30 Elfogadva 168ms 26596 KiB
31 Elfogadva 168ms 26768 KiB
32 Elfogadva 136ms 30412 KiB
subtask5 0/35
33 Elfogadva 6ms 3028 KiB
34 Elfogadva 6ms 3012 KiB
35 Elfogadva 7ms 3276 KiB
36 Elfogadva 6ms 3572 KiB
37 Elfogadva 4ms 3252 KiB
38 Elfogadva 4ms 3620 KiB
39 Elfogadva 7ms 4084 KiB
40 Elfogadva 7ms 4268 KiB
41 Elfogadva 7ms 4560 KiB
42 Elfogadva 7ms 4800 KiB
43 Elfogadva 7ms 4708 KiB
44 Elfogadva 108ms 18604 KiB
45 Elfogadva 168ms 26596 KiB
46 Elfogadva 168ms 26768 KiB
47 Elfogadva 136ms 30412 KiB
48 Elfogadva 317ms 42944 KiB
49 Futási hiba 340ms 64412 KiB
50 Futási hiba 314ms 64176 KiB
51 Futási hiba 333ms 64156 KiB
52 Futási hiba 328ms 64124 KiB