55362023-07-12 13:17:48111Drónfutárcpp14Időlimit túllépés 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;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
subtask10/0
1Elfogadva3ms1884 KiB
2Időlimit túllépés550ms54024 KiB
subtask215/15
3Elfogadva6ms4584 KiB
4Elfogadva6ms4800 KiB
5Elfogadva6ms4920 KiB
6Elfogadva6ms5112 KiB
7Elfogadva3ms5060 KiB
subtask315/15
8Elfogadva6ms4584 KiB
9Elfogadva6ms4800 KiB
10Elfogadva6ms4920 KiB
11Elfogadva6ms5112 KiB
12Elfogadva3ms5060 KiB
13Elfogadva4ms5428 KiB
14Elfogadva6ms5508 KiB
15Elfogadva6ms5628 KiB
16Elfogadva6ms5680 KiB
17Elfogadva6ms5780 KiB
subtask435/35
18Elfogadva6ms4584 KiB
19Elfogadva6ms4800 KiB
20Elfogadva6ms4920 KiB
21Elfogadva6ms5112 KiB
22Elfogadva3ms5060 KiB
23Elfogadva4ms5428 KiB
24Elfogadva6ms5508 KiB
25Elfogadva6ms5628 KiB
26Elfogadva6ms5680 KiB
27Elfogadva6ms5780 KiB
28Elfogadva6ms5936 KiB
29Elfogadva90ms15988 KiB
30Elfogadva142ms21072 KiB
31Elfogadva143ms21700 KiB
32Elfogadva108ms26296 KiB
subtask50/35
33Elfogadva6ms4584 KiB
34Elfogadva6ms4800 KiB
35Elfogadva6ms4920 KiB
36Elfogadva6ms5112 KiB
37Elfogadva3ms5060 KiB
38Elfogadva4ms5428 KiB
39Elfogadva6ms5508 KiB
40Elfogadva6ms5628 KiB
41Elfogadva6ms5680 KiB
42Elfogadva6ms5780 KiB
43Elfogadva6ms5936 KiB
44Elfogadva90ms15988 KiB
45Elfogadva142ms21072 KiB
46Elfogadva143ms21700 KiB
47Elfogadva108ms26296 KiB
48Elfogadva254ms33256 KiB
49Időlimit túllépés549ms59272 KiB
50Időlimit túllépés547ms59272 KiB
51Időlimit túllépés572ms33280 KiB
52Időlimit túllépés568ms33252 KiB