Submission #893589

#TimeUsernameProblemLanguageResultExecution timeMemory
893589vjudge1Road Construction (JOI21_road_construction)C++17
5 / 100
10041 ms19908 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define all(x) x.begin(), x.end() #define size(x) (int)x.size() template<class S, class T> bool chmin(S &a, const T &b) { return a > b && (a = b) == b; } template<class S, class T> bool chmax(S &a, const T &b) { return a < b && (a = b) == b; } const int inf = 1e9 + 7; const int INF = 1e18 + 7; const int mod = 998244353; int n, k; vector<int> x, y; multiset<int> res; int dist(int i, int j) { return abs(x[i] - x[j]) + abs(y[i] - y[j]); } void get(int l, int r) { if (l >= r) return; int mid = (l + r) / 2; get(l, mid - 1), get(mid + 1, r); for (int i = l; i <= r; ++i) { if (i == mid) continue; res.insert(dist(i, mid)); if (size(res) > k) res.erase(--res.end()); } for (int i = l; i < mid; ++i) { for (int j = mid + 1; j <= r; ++j) { res.insert(dist(i, j)); if (size(res) > k) res.erase(--res.end()); } } } signed main() { cin.tie(nullptr)->sync_with_stdio(false); cin >> n >> k; x.resize(n), y.resize(n); for (int i = 0; i < n; ++i) { cin >> x[i] >> y[i]; } vector<pair<int, int>> v; for (int i = 0; i < n; ++i) { v.emplace_back(x[i], y[i]); } sort(all(v)); for (int i = 0; i < n; ++i) { x[i] = v[i].first, y[i] = v[i].second; } get(0, n - 1); for (int i : res) { cout << i << '\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...