5536 2023. 07. 12 13:17:48 111 Drónfutár cpp14 Időlimit túllépés 65/100 572ms 59272 KiB
//#include <windows.h>
//#include <psapi.h>
#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);
	vector<int> w(N);
	vector<int> u(N);
	vector<array<int, 4>> y(N);
	vector<vector<int>> st(N * 4);
	for (int i = 0; i < N; i++) {
		cin >> v[i].x >> v[i].y;
	}
	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]); });
		fill(u.begin(), u.end(), -1);
		function<void(int, int, int)> seg = [&](int s, int l, int r) {
			if (l == r) {
				st[s] = {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++) {
			y[j][q] = u[j];
		}
	}
	w.clear();
	u.clear();
	st.clear();
	vector<vector<int>> g(N);
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < 4; j++) {
			if (y[i][j] != -1) {
				g[i].push_back(y[i][j]);
				g[y[i][j]].push_back(i);
			}
		}
	}
	y.clear();
	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 (int i : g[a.second]) {
            if (!vis[i]) {
                pq.push({dist(v[a.second], v[i]), i});
            }
        }
    }
    cout << ans << endl;
//	PROCESS_MEMORY_COUNTERS_EX pmc;
//	GetProcessMemoryInfo(GetCurrentProcess(), (PPROCESS_MEMORY_COUNTERS)&pmc, sizeof(pmc));
//	cout << pmc.PeakPagefileUsage << endl;
	return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
subtask1 0/0
1 Elfogadva 3ms 1884 KiB
2 Időlimit túllépés 550ms 54024 KiB
subtask2 15/15
3 Elfogadva 6ms 4584 KiB
4 Elfogadva 6ms 4800 KiB
5 Elfogadva 6ms 4920 KiB
6 Elfogadva 6ms 5112 KiB
7 Elfogadva 3ms 5060 KiB
subtask3 15/15
8 Elfogadva 6ms 4584 KiB
9 Elfogadva 6ms 4800 KiB
10 Elfogadva 6ms 4920 KiB
11 Elfogadva 6ms 5112 KiB
12 Elfogadva 3ms 5060 KiB
13 Elfogadva 4ms 5428 KiB
14 Elfogadva 6ms 5508 KiB
15 Elfogadva 6ms 5628 KiB
16 Elfogadva 6ms 5680 KiB
17 Elfogadva 6ms 5780 KiB
subtask4 35/35
18 Elfogadva 6ms 4584 KiB
19 Elfogadva 6ms 4800 KiB
20 Elfogadva 6ms 4920 KiB
21 Elfogadva 6ms 5112 KiB
22 Elfogadva 3ms 5060 KiB
23 Elfogadva 4ms 5428 KiB
24 Elfogadva 6ms 5508 KiB
25 Elfogadva 6ms 5628 KiB
26 Elfogadva 6ms 5680 KiB
27 Elfogadva 6ms 5780 KiB
28 Elfogadva 6ms 5936 KiB
29 Elfogadva 90ms 15988 KiB
30 Elfogadva 142ms 21072 KiB
31 Elfogadva 143ms 21700 KiB
32 Elfogadva 108ms 26296 KiB
subtask5 0/35
33 Elfogadva 6ms 4584 KiB
34 Elfogadva 6ms 4800 KiB
35 Elfogadva 6ms 4920 KiB
36 Elfogadva 6ms 5112 KiB
37 Elfogadva 3ms 5060 KiB
38 Elfogadva 4ms 5428 KiB
39 Elfogadva 6ms 5508 KiB
40 Elfogadva 6ms 5628 KiB
41 Elfogadva 6ms 5680 KiB
42 Elfogadva 6ms 5780 KiB
43 Elfogadva 6ms 5936 KiB
44 Elfogadva 90ms 15988 KiB
45 Elfogadva 142ms 21072 KiB
46 Elfogadva 143ms 21700 KiB
47 Elfogadva 108ms 26296 KiB
48 Elfogadva 254ms 33256 KiB
49 Időlimit túllépés 549ms 59272 KiB
50 Időlimit túllépés 547ms 59272 KiB
51 Időlimit túllépés 572ms 33280 KiB
52 Időlimit túllépés 568ms 33252 KiB