Submission #623040

#TimeUsernameProblemLanguageResultExecution timeMemory
623040CSQ31Road Construction (JOI21_road_construction)C++17
5 / 100
1985 ms2097152 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
//consider the case where we only need k smallest from two different set of points
//if can do this in some reasonable time then apply zs bit trick
//+log factor
//need <= log^3 maybe?
//ok two set need log^2(?)
#define all(a) a.begin(),a.end()
#define pb push_back
const int MAXN = 2000000;
int ndcnt = 0;
int t[MAXN],ch[2][MAXN];
vector<ll>glo;
int main()
{
	int n,k;
	cin>>n>>k;
	vector<array<int,2>>p(n);
	vector<int>cy(n),cxy(n);
	for(int i=0;i<n;i++)cin>>p[i][0]>>p[i][1];
	sort(all(p));
	vector<int>crd;
	for(int i=0;i<n;i++)crd.push_back(p[i][1]);
	sort(all(crd));
	crd.resize(unique(all(crd)) - crd.begin());
	for(int i=0;i<n;i++)cy[i] = lower_bound(all(crd),p[i][1]) - crd.begin();
	for(int i=0;i<n;i++){
		for(int j=0;j<i;j++){
			ll c = abs(p[i][0]-p[j][0]);
			c+=abs(p[i][1]-p[j][1]);
			glo.pb(c);	
		}
	}
	sort(all(glo));
	for(int i=0;i<k;i++)cout<<glo[i]<<'\n';
}
#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...