Submission #1282324

#TimeUsernameProblemLanguageResultExecution timeMemory
1282324trungcanRoad Construction (JOI21_road_construction)C++17
6 / 100
10092 ms7584 KiB
#include <bits/stdc++.h> #define ll long long #define pll pair<ll, ll> #define fi first #define se second using namespace std; const int N = 250005; int n, k; ll num; pll a[N]; vector<ll> ans; bool check(int x){ multiset<ll> s; int j = 1, cnt = 0; for (int i = 1; i <= n; ++i){ while (a[j].fi < a[i].fi - x){ s.erase(s.find(a[j].se)); ++j; } for (multiset<ll>::iterator it = s.lower_bound(a[i].se - x); it != s.end() && *it <= a[i].se + x; ++it) if (++cnt >= k) return 1; s.insert(a[i].se); } return 0; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> k; for (int i = 1, u, v; i <= n; ++i){ cin >> u >> v; a[i].fi = u + v; a[i].se = u - v; } sort(a + 1, a + n + 1); ll l = 1, r = 4e9; while (l <= r){ ll mid = l + ((r - l) >> 1); if (check(mid)){ num = mid; r = mid - 1; } else l = mid + 1; } --num; multiset<pll> s; int j = 1; for (int i = 1; i <= n; ++i){ while (j < i && a[j].fi < a[i].fi - num){ s.erase(s.find(make_pair(a[j].se, a[j].fi))); ++j; } for (multiset<pll>::iterator it = s.lower_bound(make_pair(a[i].se - num, -(ll)4e9)); it != s.end() && (*it).fi <= a[i].se + num; ++it) ans.push_back(max(abs(a[i].se - (*it).fi), abs(a[i].fi - (*it).se))); s.insert(make_pair(a[i].se, a[i].fi)); } sort(ans.begin(), ans.end()); for (ll x: ans) cout << x << "\n"; k -= (int)ans.size(); while (k--) cout << num + 1 << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...