#include <bits/stdc++.h>
using namespace std;
int N,K;
vector<pair<long long int,int>> v;
long long int X,Y;
long long int lst[250100];
const long long int inf = 1e18 / 2 * 2;
vector<int> wacter;
long long int plop[250100];
vector<pair<int,pair<int,int>>> de;
struct node{
int s, m, e;
int num;
node *l,*r;
node(int S, int E){
s = S;
e = E;
m = (s + e)/2;
num = 0;
if(s != e){
l = new node(s,m);
r = new node(m + 1,e);
}
}
void update(int i, int k){
if(s == e){
num += k;
return;
}
num += k;
if(i <= m){
l -> update(i,k);
}
else{
r -> update(i,k);
}
}
int query(long long int S, long long int E){
if(S <= lst[s] && lst[e] <= E){
return num;
}
int V = 0;
if(S <= lst[m]){
V += l -> query(S,E);
}
if(lst[m + 1] <= E){
V += r -> query(S,E);
}
return V;
}
void banana(long long int S, long long int E){
if(S <= lst[s] && lst[e] <= E && s != e){
if(l -> num > 0) l -> banana(S,E);
if(r -> num > 0) r -> banana(S,E);
return;
}
if(s == e ){
if(num > 0) wacter.push_back(s);
return;
}
int V = 0;
if(S <= lst[m]){
l -> banana(S,E);
}
if(lst[m + 1] <= E){
r -> banana(S,E);
}
}
}*root;
int main(){
scanf(" %d",&N);
scanf(" %d",&K);
for(int i = 0; i < N; i++){
scanf(" %lld",&X);
scanf(" %lld",&Y);
de.push_back({X+Y,{X,Y}});
}
sort(de.begin(),de.end());
for(int i = 0; i < N; i++){
int X = de[i].second.first;
int Y = de[i].second.second;
v.push_back({X - Y,i});
lst[i] = X + Y;
plop[i] = X - Y;
}
v.push_back({1e16,-1});
sort(v.begin(),v.end());
long long int s = 0;
long long int e = 5e9;
root = new node(0,N-1);
while(s != e){
long long int m = (s + e)/2;
int num = 0;
int it1 = 0;
int it2 = 0;
for(int i = 0; i < N; i++){
while(v[it1].first + m < v[i].first){
root -> update(v[it1].second,-1);
it1++;
}
while(v[i].first + m >= v[it2].first){
root -> update(v[it2].second,1);
it2++;
}
num += root -> query(lst[v[i].second] - m, lst[v[i].second] + m ) - 1;
if(num / 2 >= K) break;
}
while(it1 != it2){
root -> update(v[it1].second,-1);
it1++;
}
if(num / 2 >= K){
e = m;
}
else{
s = m + 1;
}
}
map<long long int,int> mep;
int it1 = 0;
int it2 = 0;
int voom = 0;
for(int i = 0; i < N; i++){
while(v[i].first + s > v[it2].first){
root -> update(v[it2].second,1);
it2++;
}
while(v[it1].first + s <= v[i].first){
root -> update(v[it1].second,-1);
it1++;
}
root -> banana(lst[v[i].second] - s + 1, lst[v[i].second] + s - 1);
for(int j : wacter){
// if(plop[j] - plop[v[i].second] > s) printf("hh %d %d\n",i,j);
mep[max(abs(lst[j] - lst[v[i].second]) , abs(plop[j] - plop[v[i].second]) ) ]++;
voom++;
}
wacter.clear();
}
voom -= N;
assert(voom <= K * 2);
vector<long long int> print;
mep.erase(0);
for(pair<long long int, int> ii : mep){
pair<long long int, int> temp = ii;
for(; K > 0 && temp.second > 0; K--, temp.second -= 2){
print.push_back(temp.first);
}
}
while(K > 0){
print.push_back(s);
K--;
}
for(long long int i : print){
printf("%lld\n",i);
}
}
/*
4 1
1000000000 1000000000
-1000000000 -1000000000
1000000000 -1000000000
-1000000000 1000000000
*/
Compilation message
road_construction.cpp: In member function 'void node::banana(long long int, long long int)':
road_construction.cpp:75:13: warning: unused variable 'V' [-Wunused-variable]
75 | int V = 0;
| ^
road_construction.cpp: In function 'int main()':
road_construction.cpp:89:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
89 | scanf(" %d",&N);
| ~~~~~^~~~~~~~~~
road_construction.cpp:90:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
90 | scanf(" %d",&K);
| ~~~~~^~~~~~~~~~
road_construction.cpp:93:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
93 | scanf(" %lld",&X);
| ~~~~~^~~~~~~~~~~~
road_construction.cpp:94:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
94 | scanf(" %lld",&Y);
| ~~~~~^~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
241 ms |
22904 KB |
Output is correct |
2 |
Correct |
218 ms |
22868 KB |
Output is correct |
3 |
Correct |
211 ms |
22760 KB |
Output is correct |
4 |
Correct |
201 ms |
22984 KB |
Output is correct |
5 |
Correct |
105 ms |
8636 KB |
Output is correct |
6 |
Correct |
4 ms |
2652 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1078 ms |
42100 KB |
Output is correct |
2 |
Correct |
1012 ms |
42148 KB |
Output is correct |
3 |
Correct |
161 ms |
22660 KB |
Output is correct |
4 |
Correct |
837 ms |
41588 KB |
Output is correct |
5 |
Correct |
788 ms |
41708 KB |
Output is correct |
6 |
Correct |
817 ms |
41588 KB |
Output is correct |
7 |
Correct |
605 ms |
40824 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1435 ms |
37488 KB |
Output is correct |
2 |
Correct |
2253 ms |
37488 KB |
Output is correct |
3 |
Correct |
1 ms |
2392 KB |
Output is correct |
4 |
Correct |
449 ms |
36484 KB |
Output is correct |
5 |
Correct |
2281 ms |
37484 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1435 ms |
37488 KB |
Output is correct |
2 |
Correct |
2253 ms |
37488 KB |
Output is correct |
3 |
Correct |
1 ms |
2392 KB |
Output is correct |
4 |
Correct |
449 ms |
36484 KB |
Output is correct |
5 |
Correct |
2281 ms |
37484 KB |
Output is correct |
6 |
Correct |
2978 ms |
37484 KB |
Output is correct |
7 |
Correct |
2658 ms |
37564 KB |
Output is correct |
8 |
Correct |
1 ms |
2396 KB |
Output is correct |
9 |
Correct |
1 ms |
2396 KB |
Output is correct |
10 |
Correct |
2786 ms |
37536 KB |
Output is correct |
11 |
Correct |
537 ms |
36404 KB |
Output is correct |
12 |
Correct |
3091 ms |
37488 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
241 ms |
22904 KB |
Output is correct |
2 |
Correct |
218 ms |
22868 KB |
Output is correct |
3 |
Correct |
211 ms |
22760 KB |
Output is correct |
4 |
Correct |
201 ms |
22984 KB |
Output is correct |
5 |
Correct |
105 ms |
8636 KB |
Output is correct |
6 |
Correct |
4 ms |
2652 KB |
Output is correct |
7 |
Correct |
2110 ms |
35920 KB |
Output is correct |
8 |
Correct |
2166 ms |
36128 KB |
Output is correct |
9 |
Correct |
274 ms |
22976 KB |
Output is correct |
10 |
Correct |
1523 ms |
20800 KB |
Output is correct |
11 |
Correct |
636 ms |
19788 KB |
Output is correct |
12 |
Correct |
977 ms |
20584 KB |
Output is correct |
13 |
Correct |
802 ms |
20604 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
241 ms |
22904 KB |
Output is correct |
2 |
Correct |
218 ms |
22868 KB |
Output is correct |
3 |
Correct |
211 ms |
22760 KB |
Output is correct |
4 |
Correct |
201 ms |
22984 KB |
Output is correct |
5 |
Correct |
105 ms |
8636 KB |
Output is correct |
6 |
Correct |
4 ms |
2652 KB |
Output is correct |
7 |
Correct |
1078 ms |
42100 KB |
Output is correct |
8 |
Correct |
1012 ms |
42148 KB |
Output is correct |
9 |
Correct |
161 ms |
22660 KB |
Output is correct |
10 |
Correct |
837 ms |
41588 KB |
Output is correct |
11 |
Correct |
788 ms |
41708 KB |
Output is correct |
12 |
Correct |
817 ms |
41588 KB |
Output is correct |
13 |
Correct |
605 ms |
40824 KB |
Output is correct |
14 |
Correct |
1435 ms |
37488 KB |
Output is correct |
15 |
Correct |
2253 ms |
37488 KB |
Output is correct |
16 |
Correct |
1 ms |
2392 KB |
Output is correct |
17 |
Correct |
449 ms |
36484 KB |
Output is correct |
18 |
Correct |
2281 ms |
37484 KB |
Output is correct |
19 |
Correct |
2978 ms |
37484 KB |
Output is correct |
20 |
Correct |
2658 ms |
37564 KB |
Output is correct |
21 |
Correct |
1 ms |
2396 KB |
Output is correct |
22 |
Correct |
1 ms |
2396 KB |
Output is correct |
23 |
Correct |
2786 ms |
37536 KB |
Output is correct |
24 |
Correct |
537 ms |
36404 KB |
Output is correct |
25 |
Correct |
3091 ms |
37488 KB |
Output is correct |
26 |
Correct |
2110 ms |
35920 KB |
Output is correct |
27 |
Correct |
2166 ms |
36128 KB |
Output is correct |
28 |
Correct |
274 ms |
22976 KB |
Output is correct |
29 |
Correct |
1523 ms |
20800 KB |
Output is correct |
30 |
Correct |
636 ms |
19788 KB |
Output is correct |
31 |
Correct |
977 ms |
20584 KB |
Output is correct |
32 |
Correct |
802 ms |
20604 KB |
Output is correct |
33 |
Correct |
7680 ms |
60748 KB |
Output is correct |
34 |
Correct |
7435 ms |
60752 KB |
Output is correct |
35 |
Correct |
4401 ms |
45636 KB |
Output is correct |
36 |
Correct |
2971 ms |
45688 KB |
Output is correct |
37 |
Correct |
2611 ms |
45640 KB |
Output is correct |
38 |
Correct |
2594 ms |
44436 KB |
Output is correct |