Submission #1157839

#TimeUsernameProblemLanguageResultExecution timeMemory
1157839shnRoad Construction (JOI21_road_construction)C++20
11 / 100
791 ms267060 KiB
#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize("Ofast,O3,unroll-loops")
#pragma GCC target("avx,avx2")
#define Respaabs1equal2xdoner cin.tie(nullptr)->sync_with_stdio(false);
#define pll pair < long long , long long >
#define len(s) (long long)(s.size())
#define all(x) x.begin() , x.end()
#define pofik continue
#define int long long
#define pb push_back
#define F first
#define S second
const int N = 5e5 + 77 , inf = 1e18 + 77;

int n;
int x[N], y[N];

int check(int k){
	int j = 1;
	int ans = 0;
	for(int i = 1; i <= n; i++){
		while(j < n && x[j + 1] - x[i] <= k) j++;
		ans += j - i;
	}
	return ans;
}

int k;

void make(int t){
	int j = 1;
	vector < int > v;
	for(int i = 1; i <= n; i++){
		j = max(j , i);
		while(j < n && x[j + 1] - x[i] <= k) j++;
		for(int e = i + 1; e <= j; e++){
			v.pb(x[e] - x[i]);
		}
	}
	sort(all(v));
	for(int i = 0; i < k; i++){
		cout << v[i] << '\n';
	}
}

void solve(){
	cin >> n >> k;
	for(int i = 1; i <= n; i++){
		cin >> x[i] >> y[i];
	}
	if(n <= 1000){
		vector < int > v;
		for(int i = 1; i <= n; i++){
			for(int j = i + 1; j <= n; j++) v.pb(abs(x[i] - x[j]) + abs(y[i] - y[j]));
		}
		sort(all(v));
		for(int i = 0; i < k; i++){
			cout << v[i] << '\n';
		}
		return;
	}
	sort(x + 1 , x + n + 1);
	int l = 1 , r = 4e9 , res = 1;
	while(l <= r){
		int mid = (l + r) >> 1ll;
		if(check(mid) <= k){
			l = mid + 1;
			res = mid;
		}
		else{
			l = mid + 1;
		}
	}
	make(res);
}

signed main(){
	Respaabs1equal2xdoner
	int T = 1;
	// cin >> T;
	while(T--){
		solve();
	}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...