Submission #770913

#TimeUsernameProblemLanguageResultExecution timeMemory
770913joshuaZRoad Construction (JOI21_road_construction)C++17
0 / 100
10048 ms51272 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll,ll> pll; const int mxN = 250002; int n, k; multiset<ll> path; pll a[mxN]; bool solve(ll d){ set<pll> st; for (int i = 1, j = 1; i <= n; i++){ while (a[i].first - a[j].first > d){ st.erase({a[j].second, a[j].first}); j++; } auto l = st.lower_bound({a[i].second - d, -1e10}); auto r = st.upper_bound({a[i].second + d, -1e10}); for (auto it = l; it != r; it++){ path.insert(max(abs((*it).second - a[i].first), abs((*it).first - a[i].second))); ll b = max(abs((*it).second - a[i].first), abs((*it).first - a[i].second)); assert(b <= d); if (path.size() >= 4 * mxN){ return true; } } st.insert({a[i].second, a[i].first}); } if (path.size() >= k){ return true; } else { return false; } } int main(){ ios::sync_with_stdio(0); cin.tie(0); cin >> n >> k; //xi + yi - (xj + yj) <= val //xi - yi - (xj - yj) <= val for (int i = 1; i <= n; i++){ ll x, y; cin >> x >> y; a[i].first = x + y; a[i].second = x - y; } sort(a + 1, a + 1 + n); ll lo = 1, hi = 2e9, ans = -1; while (lo <= hi){ ll mid = lo + (hi - lo) / 2; if (solve(mid)){ ans = mid; hi = mid - 1; } else { lo = mid + 1; } path.clear(); } solve(ans); int c = 1; for (auto &x : path){ cout << x << '\n'; if (c++ >= k){ break; } } }

Compilation message (stderr)

road_construction.cpp: In function 'bool solve(ll)':
road_construction.cpp:32:21: warning: comparison of integer expressions of different signedness: 'std::multiset<long long int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   32 |     if (path.size() >= k){
      |         ~~~~~~~~~~~~^~~~
#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...