Submission #1361644

#TimeUsernameProblemLanguageResultExecution timeMemory
1361644khangai11Circle selection (APIO18_circle_selection)C++20
100 / 100
2011 ms53996 KiB
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll sz=1,sz1;
bool aa(pair<ll,ll> a,pair<ll,ll> b){
	if(a.first!=b.first) return (a.first>b.first);
	return (a.second<b.second);
}
void solve(){
	ll n;
	cin>>n;
	vector<ll> x(n),y(n),r(n);
	ll ma=0;
	vector<pair<ll,ll>> v;
	for(ll a=0;a<n;a++){
		cin>>x[a]>>y[a]>>r[a];
		ma=max(ma,r[a]);
		v.push_back({r[a],a});
	}
	sort(v.begin(),v.end(),aa);
	while(sz<ma){
		sz*=2;
	}
	map<pair<ll,ll>,vector<ll>> mp;
	vector<ll> rm(n,0);
	vector<pair<ll,ll>> ba(n);
	sz*=2;
	for(ll c=0;c<n;c++){
		if(rm[v[c].second]!=0){
			continue;
		}
		if(v[c].first*2<=sz){
			while(v[c].first*2<=sz){
				sz/=2;
			}
			mp.clear();
			for(ll a=0;a<n;a++){
				if(rm[a]!=0){
					continue;
				}
				ll i,j;
				if(x[a]<0){
					i=(x[a]-sz+1)/sz;
				}else{
					i=x[a]/sz;
				}
				if(y[a]<0){
					j=(y[a]-sz+1)/sz;
				}else{
					j=y[a]/sz;
				}
				mp[{i,j}].push_back(a);
				ba[a]={i,j};
			}
		}
		vector<ll> st;
		ll i=ba[v[c].second].first,j=ba[v[c].second].second;
		for(ll a=-2;a<=2;a++){
			for(ll b=-2;b<=2;b++){
				if(mp.find({i+a,j+b})!=mp.end())
				for(auto z:mp[{i+a,j+b}]){
					ll di=abs(x[v[c].second]-x[z]),di1=abs(y[v[c].second]-y[z]),di2=r[v[c].second]+r[z];
					if(di*di+di1*di1<=di2*di2){
						st.push_back(z);
					}
				}
			}
		}
		for(auto z:st){
			if(rm[z]==0)
			rm[z]=v[c].second+1;
		}
	}
	for(ll a=0;a<n;a++){
		cout<<rm[a]<<" ";
	}
}
signed main(){
	ios::sync_with_stdio();
	cin.tie(0);
	cout.tie(0);
	ll t=1;
//	cin>>t;
	for(ll a=0;a<t;a++){
		solve();
	}
}
#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...