#pragma GCC optimize("Ofast","unroll-loops")
#include <bits/stdc++.h>
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
using namespace __gnu_pbds;
#define int long long
typedef tree<pair<int,int>,null_type,less<>,rb_tree_tag,tree_order_statistics_node_update> orderedset;
orderedset seg[1000000];
vector<pair<int,int>> points;
vector<pair<int,int>> edges;
int n;
void build(int x=1,int L=1,int R=n){
if(L==R){
seg[x].insert({points[L].second,L});
return;
}
int mid = (L+R)/2;
build(2*x,L,mid);
build(2*x+1,mid+1,R);
for(auto i:seg[2*x])seg[x].insert(i);
for(auto i:seg[2*x+1])seg[x].insert(i);
}
int get(int qL,int qR,int qUpper,int qLower,int x=1,int L=1,int R=n){
if(qR<L or R<qL)return 0;
if(qL<=L and R<=qR){
return seg[x].order_of_key({qUpper+1,0})-seg[x].order_of_key({qLower,0});
}
int mid = (L+R)/2;
return get(qL,qR,qUpper,qLower,2*x,L,mid)+get(qL,qR,qUpper,qLower,2*x+1,mid+1,R);
}
int base;
void debug(int x){
for(int i=0;i<seg[x].size();i++)cerr<<seg[x].find_by_order(i)->first<<' ';
}
void rec(int qL,int qR,int qUpper,int qLower,int x=1,int L=1,int R=n){
if(qR<L or R<qL)return;
if(qL<=L and R<=qR){
auto lo = seg[x].order_of_key({qLower,0});
auto hi = seg[x].order_of_key({qUpper+1,0});
while(lo!=hi){
edges.emplace_back(min(base,(int)seg[x].find_by_order(lo)->second),max(base,(int)seg[x].find_by_order(lo)->second));
lo++;
}
return;
}
int mid = (L+R)/2;
rec(qL,qR,qUpper,qLower,2*x,L,mid);
rec(qL,qR,qUpper,qLower,2*x+1,mid+1,R);
}
int32_t main(){
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int k;
cin >> n >> k;
for(int i=1;i<=n;i++){
int x,y;
cin >> x >> y;swap(x,y);
points.emplace_back(x-y,x+y);
}
sort(points.begin(),points.end());
points.insert(points.begin(),{0,0});
build();
auto calc = [&](int limit){
int curr = 0;
for(int i=1;i<=n;i++){
int qL = lower_bound(points.begin()+1,points.end(),make_pair(points[i].first-limit,0ll))-points.begin();
int qR = lower_bound(points.begin()+1,points.end(),make_pair(points[i].first+limit,0ll))-points.begin()-1;
curr+=get(qL,qR,points[i].second+limit,points[i].second-limit);
}
curr-=n;
return curr<2*k;
};
vector<int> edgewt;
auto recover = [&](int limit){
for(int i=1;i<=n;i++){
int qL = lower_bound(points.begin(),points.end(),make_pair(points[i].first-limit,0ll))-points.begin();
int qR = lower_bound(points.begin(),points.end(),make_pair(points[i].first+limit,0ll))-points.begin()-1;
base = i;
rec(qL,qR,points[i].second+limit,points[i].second-limit);
}
sort(edges.begin(),edges.end());
edges.erase(unique(edges.begin(),edges.end()),edges.end());
for(auto[a,b]:edges){
if(a==b)continue;
edgewt.emplace_back(max(abs(points[a].first-points[b].first),abs(points[a].second-points[b].second)));
}
sort(edgewt.begin(),edgewt.end());
};
int ans = 0;
#pragma GCC unroll 40
for(int jump=2147483648ll;jump;jump/=2)if(calc(ans+jump))ans+=jump;
recover(ans);
for(int i=0;i<k;i++){
if(i<edgewt.size())cout<<edgewt[i]<<'\n';
else cout<<ans+1<<'\n';
}
}
Compilation message
road_construction.cpp: In function 'void debug(long long int)':
road_construction.cpp:41:18: warning: comparison of integer expressions of different signedness: 'long long int' and '__gnu_pbds::detail::bin_search_tree_set<std::pair<long long int, long long int>, __gnu_pbds::null_type, std::less<void>, __gnu_pbds::detail::tree_traits<std::pair<long long int, long long int>, __gnu_pbds::null_type, std::less<void>, __gnu_pbds::tree_order_statistics_node_update, __gnu_pbds::rb_tree_tag, std::allocator<char> >, std::allocator<char> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
41 | for(int i=0;i<seg[x].size();i++)cerr<<seg[x].find_by_order(i)->first<<' ';
| ~^~~~~~~~~~~~~~
road_construction.cpp: In function 'int32_t main()':
road_construction.cpp:105:13: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
105 | if(i<edgewt.size())cout<<edgewt[i]<<'\n';
| ~^~~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
151 ms |
109528 KB |
Output is correct |
2 |
Correct |
155 ms |
109488 KB |
Output is correct |
3 |
Correct |
147 ms |
109492 KB |
Output is correct |
4 |
Correct |
143 ms |
109316 KB |
Output is correct |
5 |
Correct |
142 ms |
108464 KB |
Output is correct |
6 |
Correct |
55 ms |
94960 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
4690 ms |
414592 KB |
Output is correct |
2 |
Correct |
4589 ms |
415436 KB |
Output is correct |
3 |
Correct |
124 ms |
109204 KB |
Output is correct |
4 |
Correct |
4816 ms |
415016 KB |
Output is correct |
5 |
Correct |
4865 ms |
414756 KB |
Output is correct |
6 |
Correct |
4617 ms |
414824 KB |
Output is correct |
7 |
Correct |
4441 ms |
414744 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
8225 ms |
403952 KB |
Output is correct |
2 |
Correct |
7839 ms |
404496 KB |
Output is correct |
3 |
Correct |
50 ms |
94292 KB |
Output is correct |
4 |
Correct |
4930 ms |
402972 KB |
Output is correct |
5 |
Correct |
6568 ms |
404584 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
8225 ms |
403952 KB |
Output is correct |
2 |
Correct |
7839 ms |
404496 KB |
Output is correct |
3 |
Correct |
50 ms |
94292 KB |
Output is correct |
4 |
Correct |
4930 ms |
402972 KB |
Output is correct |
5 |
Correct |
6568 ms |
404584 KB |
Output is correct |
6 |
Correct |
8012 ms |
405228 KB |
Output is correct |
7 |
Correct |
8129 ms |
405232 KB |
Output is correct |
8 |
Correct |
48 ms |
94228 KB |
Output is correct |
9 |
Correct |
49 ms |
94284 KB |
Output is correct |
10 |
Correct |
7891 ms |
405940 KB |
Output is correct |
11 |
Correct |
4746 ms |
403624 KB |
Output is correct |
12 |
Correct |
6175 ms |
404596 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
151 ms |
109528 KB |
Output is correct |
2 |
Correct |
155 ms |
109488 KB |
Output is correct |
3 |
Correct |
147 ms |
109492 KB |
Output is correct |
4 |
Correct |
143 ms |
109316 KB |
Output is correct |
5 |
Correct |
142 ms |
108464 KB |
Output is correct |
6 |
Correct |
55 ms |
94960 KB |
Output is correct |
7 |
Correct |
4048 ms |
225776 KB |
Output is correct |
8 |
Correct |
3950 ms |
225496 KB |
Output is correct |
9 |
Correct |
143 ms |
109228 KB |
Output is correct |
10 |
Correct |
2761 ms |
225844 KB |
Output is correct |
11 |
Correct |
2531 ms |
225012 KB |
Output is correct |
12 |
Correct |
2156 ms |
227624 KB |
Output is correct |
13 |
Correct |
2191 ms |
224824 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
151 ms |
109528 KB |
Output is correct |
2 |
Correct |
155 ms |
109488 KB |
Output is correct |
3 |
Correct |
147 ms |
109492 KB |
Output is correct |
4 |
Correct |
143 ms |
109316 KB |
Output is correct |
5 |
Correct |
142 ms |
108464 KB |
Output is correct |
6 |
Correct |
55 ms |
94960 KB |
Output is correct |
7 |
Correct |
4690 ms |
414592 KB |
Output is correct |
8 |
Correct |
4589 ms |
415436 KB |
Output is correct |
9 |
Correct |
124 ms |
109204 KB |
Output is correct |
10 |
Correct |
4816 ms |
415016 KB |
Output is correct |
11 |
Correct |
4865 ms |
414756 KB |
Output is correct |
12 |
Correct |
4617 ms |
414824 KB |
Output is correct |
13 |
Correct |
4441 ms |
414744 KB |
Output is correct |
14 |
Correct |
8225 ms |
403952 KB |
Output is correct |
15 |
Correct |
7839 ms |
404496 KB |
Output is correct |
16 |
Correct |
50 ms |
94292 KB |
Output is correct |
17 |
Correct |
4930 ms |
402972 KB |
Output is correct |
18 |
Correct |
6568 ms |
404584 KB |
Output is correct |
19 |
Correct |
8012 ms |
405228 KB |
Output is correct |
20 |
Correct |
8129 ms |
405232 KB |
Output is correct |
21 |
Correct |
48 ms |
94228 KB |
Output is correct |
22 |
Correct |
49 ms |
94284 KB |
Output is correct |
23 |
Correct |
7891 ms |
405940 KB |
Output is correct |
24 |
Correct |
4746 ms |
403624 KB |
Output is correct |
25 |
Correct |
6175 ms |
404596 KB |
Output is correct |
26 |
Correct |
4048 ms |
225776 KB |
Output is correct |
27 |
Correct |
3950 ms |
225496 KB |
Output is correct |
28 |
Correct |
143 ms |
109228 KB |
Output is correct |
29 |
Correct |
2761 ms |
225844 KB |
Output is correct |
30 |
Correct |
2531 ms |
225012 KB |
Output is correct |
31 |
Correct |
2156 ms |
227624 KB |
Output is correct |
32 |
Correct |
2191 ms |
224824 KB |
Output is correct |
33 |
Execution timed out |
10037 ms |
397636 KB |
Time limit exceeded |
34 |
Halted |
0 ms |
0 KB |
- |