#include <bits/stdc++.h>
using namespace std;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
long long n,k;cin >> n >> k;
vector<long long> X(n);
vector<long long> Y(n);
vector<vector<long long>> points(n,vector<long long>(3));
vector<vector<long long>> points2(n,vector<long long>(3));
for(int i = 0;i<n;i++){
cin >> X[i];cin >> Y[i];
points[i][0]= X[i];
points[i][1] = Y[i];
points[i][2] = i;
points2[i][0] = Y[i];
points2[i][1] = X[i];
points2[i][2] = i;
}
//obviously I can't construct all possible pairs of roads
//as that will tle
sort(points.begin(),points.end());
sort(points2.begin(),points2.end());
//Subtask 1 : N <= 1000;
//ok grabbed subtask 1
//subtask 3, k = 1
//subatsk 4 : k <= 10, basically the same as subtask 3 but a larger range
vector<long long> dist;
set<pair<long long,long long>> s;
for(int i = 0;i<n;i++){
long long x = points[i][0];
long long y = points[i][1];
long long id = points[i][2];
long long n1 = LLONG_MAX;
long long n2 = LLONG_MAX;
long long left = max(0LL,i-k);
long long right = min(n-1,i+k);
for(int j = i+1;j<=right;j++){
if (s.find({min(id,points[j][2]),max(id,points[j][2])}) == s.end()){
n2 = abs(x - points[j][0]) + abs(y - points[j][1]);
dist.push_back(n2);
s.insert({min(id,points[j][2]),max(id,points[j][2])});
}
}
}
for(int i = 0;i<n;i++){
long long y = points2[i][0];
long long x = points2[i][1];
long long id = points2[i][2];
long long n1 = LLONG_MAX;
long long n2 = LLONG_MAX;
long long left = max(0LL,i-k);
long long right = min(n-1,i+k);
for(int j = i+1;j<=right;j++){
if (s.find({min(id,points[j][2]),max(id,points[j][2])}) == s.end()){
n2 = abs(y - points2[j][0]) + abs(x - points2[j][1]);
dist.push_back(n2);
s.insert({min(id,points[j][2]),max(id,points[j][2])});
}
}
}
sort(dist.begin(),dist.end());
for(int i = 0;i<k;i++){
cout << dist[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... |