#include <bits/stdc++.h>
using namespace std;
auto sol = [](int n, int m, int k, auto v) {
sort(v.begin(), v.end());
vector adj(n, vector(0, 0));
for (int iter = 0; iter < 4; iter++) {
vector c(0, 0);
for (int i = 0; i < n; i++) {
c.push_back(v[i][0]);
c.push_back(v[i][0] + m);
}
sort(c.begin(), c.end());
c.erase(unique(c.begin(), c.end()), c.end());
vector in(c.size(), vector(0, 0));
vector out(c.size(), vector(0, 0));
vector buc(c.size(), vector(0, 0));
for (int i = 0; i < n; i++) {
int p1 = lower_bound(c.begin(), c.end(), v[i][0]) - c.begin();
int p2 = lower_bound(c.begin(), c.end(), v[i][0] + m) - c.begin();
in[p1].push_back(i);
out[p2].push_back(i);
buc[p1].push_back(i);
buc[p2].push_back(i);
}
set s{ pair(0, 0) }; s.clear();
for (int x = 0; x < c.size(); x++) {
for (int i : in[x]) {
s.insert(pair(v[i][1] + m, i));
}
for (int i : buc[x]) {
if (s.begin()->first >= v[i][1]) continue;
auto it = prev(s.lower_bound(pair(v[i][1], -1)));
if (it->first < v[i][1] - k) continue;
int j = it->second;
adj[i].push_back(j);
adj[j].push_back(i);
}
for (int i : out[x]) {
s.erase(pair(v[i][1] + m, i));
}
}
for (int i = 0; i < n; i++) {
swap(v[i][0], v[i][1]);
v[i][1] = -v[i][1] - m;
}
}
vector c(n, 0);
auto rec = [&](const auto& self, int cur) -> int {
c[cur] = 1;
int ret = v[cur][0] + v[cur][1] + 2 * m;
for (int nxt : adj[cur]) {
if (c[nxt]) continue;
ret = max(ret, self(self, nxt));
}
return ret;
};
return rec(rec, 0);
};
int main() {
cin.tie(0)->sync_with_stdio(0);
int n, m; cin >> n >> m;
vector v(n, array{ 0, 0 });
for (int i = 0; i < n; i++) cin >> v[i][0] >> v[i][1];
int k; cin >> k;
cout << sol(n, m, k, v) << '\n';
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |