55362023-07-12 13:17:48111Drónfutárcpp14Time limit exceeded 65/100572ms59272 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;
}
SubtaskSumTestVerdictTimeMemory
subtask10/0
1Accepted3ms1884 KiB
2Time limit exceeded550ms54024 KiB
subtask215/15
3Accepted6ms4584 KiB
4Accepted6ms4800 KiB
5Accepted6ms4920 KiB
6Accepted6ms5112 KiB
7Accepted3ms5060 KiB
subtask315/15
8Accepted6ms4584 KiB
9Accepted6ms4800 KiB
10Accepted6ms4920 KiB
11Accepted6ms5112 KiB
12Accepted3ms5060 KiB
13Accepted4ms5428 KiB
14Accepted6ms5508 KiB
15Accepted6ms5628 KiB
16Accepted6ms5680 KiB
17Accepted6ms5780 KiB
subtask435/35
18Accepted6ms4584 KiB
19Accepted6ms4800 KiB
20Accepted6ms4920 KiB
21Accepted6ms5112 KiB
22Accepted3ms5060 KiB
23Accepted4ms5428 KiB
24Accepted6ms5508 KiB
25Accepted6ms5628 KiB
26Accepted6ms5680 KiB
27Accepted6ms5780 KiB
28Accepted6ms5936 KiB
29Accepted90ms15988 KiB
30Accepted142ms21072 KiB
31Accepted143ms21700 KiB
32Accepted108ms26296 KiB
subtask50/35
33Accepted6ms4584 KiB
34Accepted6ms4800 KiB
35Accepted6ms4920 KiB
36Accepted6ms5112 KiB
37Accepted3ms5060 KiB
38Accepted4ms5428 KiB
39Accepted6ms5508 KiB
40Accepted6ms5628 KiB
41Accepted6ms5680 KiB
42Accepted6ms5780 KiB
43Accepted6ms5936 KiB
44Accepted90ms15988 KiB
45Accepted142ms21072 KiB
46Accepted143ms21700 KiB
47Accepted108ms26296 KiB
48Accepted254ms33256 KiB
49Time limit exceeded549ms59272 KiB
50Time limit exceeded547ms59272 KiB
51Time limit exceeded572ms33280 KiB
52Time limit exceeded568ms33252 KiB