#include <bits/stdc++.h>
using namespace std;
long long fenw[500005];
void update(int x, long long v){
x++;
for(;x<500005;x+=x&-x) fenw[x]+=v;
}
long long query(int x){
x++;
long long ret=0;
for(;x;x-=x&-x) ret+=fenw[x];
return ret;
}
int n,k;
pair<long long,long long> arr[250005];
int32_t main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> k;
vector<long long> disc;
for(int i=0; i<n; i++){
long long a,b;
cin >> a >> b;
arr[i]={a+b,a-b};
disc.push_back(a+b);
disc.push_back(a-b);
}
sort(disc.begin(),disc.end());
disc.erase(unique(disc.begin(),disc.end()),disc.end());
sort(arr,arr+n);
long long lo=0,hi=1e10,mid;
while(lo<hi){
mid=(lo+hi+1)/2ll;
long long got=0;
int cnt=0;
for(int i=0; i<n; i++){
while(cnt<i&&arr[cnt].first<arr[i].first-mid){
int ind=lower_bound(disc.begin(),disc.end(),arr[cnt].second)-disc.begin();
update(ind,-1);
cnt++;
}
int lb=lower_bound(disc.begin(),disc.end(),arr[i].second-mid)-disc.begin();
int ub=upper_bound(disc.begin(),disc.end(),arr[i].second+mid)-disc.begin()-1;
assert(lb<=ub);
got+=query(ub)-query(lb-1);
int ind=lower_bound(disc.begin(),disc.end(),arr[i].second)-disc.begin();
update(ind,1);
}
for(;cnt<n;cnt++){
int ind=lower_bound(disc.begin(),disc.end(),arr[cnt].second)-disc.begin();
update(ind,-1);
}
if(got<k) lo=mid;
else hi=mid-1;
}
int cnt=0;
set<pair<long long,long long> > s;
set<pair<long long,long long> >::iterator it;
vector<long long> ans;
for(int i=0; i<n; i++){
while(cnt<i&&arr[cnt].first<arr[i].first-lo){
s.erase({arr[cnt].second,arr[cnt].first});
cnt++;
}
it=s.lower_bound({arr[i].second-lo,-1e16});
while(it!=s.end()&&it->first<=arr[i].second+lo){
ans.push_back(max(arr[i].second-it->first,arr[i].first-it->second));
it++;
}
s.insert({arr[i].second,arr[i].first});
}
while((int)ans.size()<k) ans.push_back(lo+1);
sort(ans.begin(),ans.end());
for(auto i:ans) cout << 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... |