Submission #1361626

#TimeUsernameProblemLanguageResultExecution timeMemory
1361626javkhlantogsCircle selection (APIO18_circle_selection)C++20
100 / 100
2714 ms110300 KiB
#include<bits/stdc++.h>
#define ll long long
using namespace std;
bool check(ll x1,ll y1,ll r1,ll x2,ll y2,ll r2){
	ll dist=(x2-x1)*(x2-x1)+(y2-y1)*(y2-y1);
	if(dist<=(r2+r1)*(r2+r1)) return true;
	return false;
}
int main(){
	ll n,i,j,k,q;
	cin>>n;
	vector<vector<ll>> c(n,vector<ll>(3));
	vector<ll> ans(n+1);
	set<vector<ll>> st;
	set<ll> st1;
	for(i=0 ; i<n ; i++){
		cin>>c[i][0]>>c[i][1]>>c[i][2];
		c[i][0]+=1e9;
		c[i][1]+=1e9;
		st.insert({-c[i][2],i});
		st1.insert(i);
	}
	ll L=1e18;
	map<pair<ll,ll>,set<ll>> mp;
	while(st.size()){
		ll R=-(*st.begin())[0];
		ll ind=(*st.begin())[1];
		if(R*2<=L){
			while(R*2<=L)
				L/=2;
			mp.clear();
			for(auto v:st1){
				mp[{c[v][0]/L,c[v][1]/L}].insert(v);
			}
		}
		ll x=c[ind][0]/L;
		ll y=c[ind][1]/L;
		for(i=x-2 ; i<=x+2 ; i++){
			for(j=y-2 ; j<=y+2 ; j++){
				if(mp.find({i,j})==mp.end()) continue;
				vector<ll> a;
				for(auto v:mp[{i,j}]){
					if(check(c[ind][0],c[ind][1],c[ind][2],c[v][0],c[v][1],c[v][2])){
						a.push_back(v);
					}
				}
				for(auto v:a){
					mp[{i,j}].erase(v);
					ans[v+1]=ind+1;
					st.erase({-c[v][2],v});
					st1.erase(v);
				}
			}
		}
	}
	for(i=1 ; i<=n ; i++) cout<<ans[i]<<" ";
	return 0;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...