Submission #893818

#TimeUsernameProblemLanguageResultExecution timeMemory
893818NurislamRoad Construction (JOI21_road_construction)C++14
100 / 100
8923 ms573472 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back #define ff first #define ss second #define all(x) x.begin(),x.end() #define rall(x) x.rbegin(),x.rend() #define int long long ///* __ __ __ */ ///* ====== _ /| /| __ _ / | | /| | @ | | | | / /| |\ | / | | @ | / */ ///* \- || |_| |_ / |/ | | | |_ |- | |--| /-| | | \ \ |==| |- /=| | \ | | |--| | |- */ ///* || | | |_ / | |__| _| |_ \__ | | / | |__ | __| | | | \ / | | \| \__ | | | | \ */ ///* typedef vector<int> vi; typedef pair<int,int> pii; typedef vector<pii> vii; multiset<int> ans; const int N = 3e5; struct pt { int x, y, id; }; map<pii, bool> mp; pt a[N]; int n, k; bool cmp_x (const pt & a, const pt & b) { return a.x < b.x || (a.x == b.x && a.y < b.y); } bool cmp_y (const pt & a, const pt & b) { return a.y < b.y; } double mindist; int ansa, ansb; void upd_ans (const pt & a, const pt & b) { if(mp[{a.id,b.id}])return; mp[{a.id, b.id}] = 1; mp[{b.id, a.id}] = 1; int dist = abs(a.x-b.x) + abs(a.y-b.y); ans.insert(dist); while((int)ans.size()>k)ans.erase(prev(ans.end())); if((int)ans.size()>=k)mindist = *ans.rbegin(); } void rec (int l, int r) { if (r - l <= 3) { for (int i=l; i<=r; ++i) for (int j=i+1; j<=r; ++j) upd_ans (a[i], a[j]); sort (a+l, a+r+1, &cmp_y); return; } int m = (l + r) >> 1; int midx = a[m].x; rec (l, m), rec (m+1, r); static pt t[N]; merge (a+l, a+m+1, a+m+1, a+r+1, t, &cmp_y); copy (t, t+r-l+1, a+l); int tsz = 0; for (int i=l; i<=r; ++i) if (abs (a[i].x - midx) < mindist) { for (int j=tsz-1; j>=0 && a[i].y - t[j].y < mindist; --j) upd_ans (a[i], t[j]); t[tsz++] = a[i]; } } void solve(){ cin >> n >> k; for (int i = 0; i < n; i++) { cin >> a[i].x >> a[i].y; a[i].id = i; } sort (a, a+n, &cmp_x); mindist = 1e18; rec (0, n-1); for(auto i:ans){ cout << i << '\n'; } } main(){ ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); int test = 1; //~ cin >> test; while(test--){ solve(); } }

Compilation message (stderr)

road_construction.cpp:82:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   82 | main(){
      | ^~~~
#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...