Submission #440136

#TimeUsernameProblemLanguageResultExecution timeMemory
440136KULIKOLDCircle selection (APIO18_circle_selection)C++17
7 / 100
2503 ms1048580 KiB
//#pragma GCC optimize ("O3") #include <bits/stdc++.h> using namespace std; typedef long long ll; #define endl '\n' const int DIM = 3E5+7; const int INF = 1E9; struct node{ ll x,y,r,pos; } A[DIM]; int P[DIM],ans[DIM]; bool mc(const node &a,const node &b){ if (a.r==b.r){ return a.pos<b.pos; } return a.r>b.r; } bool can(const node &a,const node &b){ return (a.r+b.r)*(a.r+b.r)>=(a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y); } int n; int solve(){ sort(A+1,A+1+n,mc); for(int i = 1;i<=n;++i){ if (P[i]) continue; P[i] = i; ans[A[i].pos] = A[i].pos; for(int j = i+1;j<=n;++j) if (!P[j] && can(A[i],A[j])) P[j] = i,ans[A[j].pos] = A[i].pos; } for(int i = 1;i<=n;++i) cout<<ans[i]<<' '; cout<<endl; return 1; } void solve1(){ set<pair<ll,ll> > SL,SR; sort(A+1,A+1+n,mc); for(int i = 1;i<=n;++i){ SL.insert({A[i].x-A[i].r,i}); SR.insert({A[i].x+A[i].r,i}); } for(int i = 1;i<=n;++i){ vector<int> V; { auto it = SL.lower_bound({A[i].x - A[i].r, 0}); while (it != SL.end() && it->first <= A[i].x + A[i].r) { ans[A[it->second].pos] = A[i].pos; V.push_back(it->second); it = next(it); } } { auto it = SR.upper_bound({A[i].x+A[i].r,INF}); if (it!=SR.begin()){ it = prev(it); while(1 && it->first>=A[i].x-A[i].r){ ans[A[it->second].pos] = A[i].pos; V.push_back(it->second); if (it==SR.begin()) break; } } } for(int i:V){ SL.erase({A[i].x-A[i].r,i}); SR.erase({A[i].x+A[i].r,i}); } } for(int i = 1;i<=n;++i) cout<<ans[i]<<' '; cout<<endl; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n; for(int i = 1;i<=n;++i){ cin>>A[i].x>>A[i].y>>A[i].r; A[i].pos = i; } if (n<=5000) solve(); else solve1(); return 0; }
#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...