Submission #1209422

#TimeUsernameProblemLanguageResultExecution timeMemory
1209422PenguinsAreCuteRoad Construction (JOI21_road_construction)C++17
0 / 100
10085 ms1064912 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; struct seg { vector<pair<ll,int>> dat; int n; seg(int _n): n(_n), dat(2*_n,{1e18,0}) {} void up(int x, pair<ll,int> v) { for(dat[x += n] = v; x >>= 1;) dat[x] = min(dat[x<<1], dat[x<<1|1]); } pair<ll,int> qry(int l, int r) { pair<ll,int> ans = {1e18,0}; for(l+=n,r+=n+1;l<r;l>>=1,r>>=1) { if(l&1) ans=min(ans,dat[l++]); if(r&1) ans=min(ans,dat[--r]); } return ans; } }; vector<ll> solve(vector<pair<int,int>> pts, int k) { int n = pts.size(); sort(pts.begin(),pts.end()); vector<pair<int,int>> disc(n); for(int i=0;i<n;i++) disc[i] = {pts[i].second, i}; sort(disc.begin(),disc.end()); for(int i=0;i<n;i++) disc[i] = {disc[i].second, i}; sort(disc.begin(),disc.end()); vector<ll> res; seg s(n); for(int i=0;i<n;i++) { auto [x, y] = pts[i]; vector<int> taboo; for(int j=1;j*j<=4*k;j++) { auto [d, p] = s.qry(0,disc[i].second); if(d == 1e18) break; s.up(disc[p].second, {1e18,p}); res.push_back(d + x + y); taboo.push_back(p); } for(auto p: taboo) s.up(disc[p].second, {-pts[p].first-pts[p].second,i}); s.up(disc[i].second, {-x-y,i}); } s = seg(n); for(int i=0;i<n;i++) { auto [x, y] = pts[i]; vector<int> taboo; for(int j=1;j*j<=4*k;j++) { auto [d, p] = s.qry(disc[i].second,n-1); if(d == 1e18) break; s.up(disc[p].second, {1e18,p}); res.push_back(d + x - y); taboo.push_back(p); } for(auto p: taboo) s.up(disc[p].second, {-pts[p].first+pts[p].second,i}); s.up(disc[i].second, {-x-y,i}); } return res; } int main() { int n, k; cin >> n >> k; vector<pair<int,int>> xy(n); for(int i=0;i<n;i++) cin >> xy[i].first >> xy[i].second; vector<ll> res = solve(xy, k); sort(res.begin(),res.end()); for(int i=0;i<k;i++) cout << res[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...