Submission #138668

#TimeUsernameProblemLanguageResultExecution timeMemory
138668FedericoSCircle selection (APIO18_circle_selection)C++14
0 / 100
3063 ms54428 KiB
#include <iostream> #include <algorithm> #include <vector> #include <set> #include <map> using namespace std; typedef long long int ll; typedef pair<ll,ll> pll; int N; ll X[300005],Y[300005],R[300005]; ll A[300005],P[300005]; vector<pll> V; ll a; set<pll> S; map<ll, set<pll> > M; ll r; int main(){ cin>>N; for(int i=0;i<N;i++){ cin>>X[i]>>Y[i]>>R[i]; a=max(a,Y[i]); } if(false and N<5001){ for(int i=0;i<N;i++) V.push_back({-R[i],i}); sort(V.begin(),V.end()); for(int i=0;i<N;i++) P[i]=V[i].second; //for(int i=0;i<N;i++)cout<<P[i]+1<<" ";cout<<endl; for(int i=0;i<N;i++) for(int j=i+1;j<N;j++) if( (X[P[i]]-X[P[j]])*(X[P[i]]-X[P[j]])+ (Y[P[i]]-Y[P[j]])*(Y[P[i]]-Y[P[j]])<= (R[P[i]]+R[P[j]])*(R[P[i]]+R[P[j]]) and !A[P[j]] and !A[P[i]] ) A[P[j]]=P[i]+1; for(int i=0;i<N;i++) cout<<(A[i]?A[i]:(i+1))<<" "; } else if(false and !a){ for(int i=0;i<N;i++) V.push_back({-R[i],i}); sort(V.begin(),V.end()); for(int i=0;i<N;i++){ S.insert({X[i]+R[i],i}); S.insert({X[i]-R[i],i}); P[i]=V[i].second; } for(int j=0;j<N;j++){ int i=P[j]; if(S.count({X[i]-R[i],i})) for(auto p=S.lower_bound({X[i]-R[i],-1});p!=S.lower_bound({X[i]+R[i]+1,-1});){ int q=p->second; A[q]=i+1; if(p==S.find({X[q]-R[q],q})) p++; S.erase(S.find({X[q]-R[q],q})); if(p==S.find({X[q]+R[q],q})) p++; S.erase(S.find({X[q]+R[q],q})); } } for(int i=0;i<N;i++) cout<<A[i]<<" ";} else{ r=2*R[0]; for(int i=0;i<N;i++) M[X[i]].insert({Y[i],i}); for(int i=0;i<N;i++) if(!A[i]){ for(auto s=M.lower_bound(X[i]-r);s!=M.lower_bound(X[i]+r+1);){ for(auto p=(s->second).lower_bound({Y[i]-r,-1});p!=(s->second).lower_bound({Y[i]+r+1,-1});){ int j=p->second; auto q=p; p++; if((X[i]-X[j])*(X[i]-X[j])+(Y[i]-Y[j])*(Y[i]-Y[j])<=r*r){ A[j]=i+1; (s->second).erase(q); } } /* auto g=s; s++; if((g->second).empty()) M.erase(g);*/ } } for(int i=0;i<N;i++) cout<<A[i]<<" "; } }
#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...