#include <bits/stdc++.h>
#define ff first
#define ss second
#define pb push_back
#define all(x) x.begin(),x.end()
#define rall(x) x.rbegin(),x.rend()
#define int long long
using namespace std;
int pow(int a,int b,int m){int ans=1;while(b){if(b&1){ans=(ans*a)%m;}b>>=1;a=(a*a)%m;}return ans;}
int binpow(int a,int b){int ans=1;while(b){if(b&1){ans=(ans*a);}b>>=1;a=(a*a);}return ans;}
const int N = 1e5 + 2, inf = 1e9, MAXN = 3e5;
int k;
struct pt {
int x, y, id;
};
inline bool cmp_x (const pt & a, const pt & b) {
return a.x < b.x || a.x == b.x && a.y < b.y;
}
inline bool cmp_y (const pt & a, const pt & b) {
return a.y < b.y;
}
pt a[MAXN];
int mindist;
int ansa, ansb;
multiset <pair <int,int>> st;
inline void upd_ans (const pt & a, const pt & b) {
int dist = abs(a.x-b.x) + abs(a.y-b.y);
if(st.find({dist, a.id * b.id}) != st.end()){
//cout << "was\n";
return;
}
if((int)st.size() < k || (--st.end()) ->ff > dist){
if((int)st.size() < k){
st.insert({dist, a.id * b.id});
}else{
st.erase(--st.end());
st.insert({dist, a.id * b.id});
}
}
if((int)st.size() == k)
mindist = (--st.end()) ->ff;
}
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[MAXN];
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];
}
}
main(){
iostream::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int n;
cin >> n >> k;
for(int i = 0; i < n; i++){
cin >> a[i].x >> a[i].y;
a[i].id = i + 1;
}
sort (a, a+n, &cmp_x);
mindist = inf * 10;
rec (0, n-1);
for(auto x : st){
cout << x.ff <<"\n";
}
}
Compilation message
road_construction.cpp: In function 'bool cmp_x(const pt&, const pt&)':
road_construction.cpp:22:33: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
22 | return a.x < b.x || a.x == b.x && a.y < b.y;
| ~~~~~~~~~~~^~~~~~~~~~~~
road_construction.cpp: At global scope:
road_construction.cpp:77:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
77 | main(){
| ^~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
335 ms |
20536 KB |
Output is correct |
2 |
Correct |
314 ms |
20564 KB |
Output is correct |
3 |
Correct |
200 ms |
20784 KB |
Output is correct |
4 |
Correct |
189 ms |
20844 KB |
Output is correct |
5 |
Incorrect |
285 ms |
19536 KB |
Output isn't correct |
6 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1652 ms |
30108 KB |
Output is correct |
2 |
Correct |
1753 ms |
33132 KB |
Output is correct |
3 |
Correct |
161 ms |
20576 KB |
Output is correct |
4 |
Correct |
1815 ms |
33260 KB |
Output is correct |
5 |
Incorrect |
1568 ms |
33108 KB |
Output isn't correct |
6 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
101 ms |
13136 KB |
Output is correct |
2 |
Correct |
101 ms |
13188 KB |
Output is correct |
3 |
Correct |
0 ms |
2392 KB |
Output is correct |
4 |
Correct |
67 ms |
13176 KB |
Output is correct |
5 |
Correct |
91 ms |
13172 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
101 ms |
13136 KB |
Output is correct |
2 |
Correct |
101 ms |
13188 KB |
Output is correct |
3 |
Correct |
0 ms |
2392 KB |
Output is correct |
4 |
Correct |
67 ms |
13176 KB |
Output is correct |
5 |
Correct |
91 ms |
13172 KB |
Output is correct |
6 |
Correct |
104 ms |
13172 KB |
Output is correct |
7 |
Correct |
107 ms |
13172 KB |
Output is correct |
8 |
Correct |
1 ms |
2396 KB |
Output is correct |
9 |
Correct |
1 ms |
2396 KB |
Output is correct |
10 |
Correct |
104 ms |
13180 KB |
Output is correct |
11 |
Correct |
70 ms |
13140 KB |
Output is correct |
12 |
Correct |
89 ms |
13140 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
335 ms |
20536 KB |
Output is correct |
2 |
Correct |
314 ms |
20564 KB |
Output is correct |
3 |
Correct |
200 ms |
20784 KB |
Output is correct |
4 |
Correct |
189 ms |
20844 KB |
Output is correct |
5 |
Incorrect |
285 ms |
19536 KB |
Output isn't correct |
6 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
335 ms |
20536 KB |
Output is correct |
2 |
Correct |
314 ms |
20564 KB |
Output is correct |
3 |
Correct |
200 ms |
20784 KB |
Output is correct |
4 |
Correct |
189 ms |
20844 KB |
Output is correct |
5 |
Incorrect |
285 ms |
19536 KB |
Output isn't correct |
6 |
Halted |
0 ms |
0 KB |
- |