#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,p});
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,p});
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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |