Submission #1043474

#TimeUsernameProblemLanguageResultExecution timeMemory
1043474vjudge1Circle selection (APIO18_circle_selection)C++17
19 / 100
1300 ms85688 KiB
#include <bits/stdc++.h> using namespace std; #define int long long bool inte(vector<int> c,vector<int> c1) { int dis=(c[2]-c1[2])*(c[2]-c1[2])+(c[3]-c1[3])*(c[3]-c1[3]); return dis <= (c[0]+c1[0])*(c[0]+c1[0]); } signed main() { int n; cin>>n; int r[n],x[n],y[n],ans[n]={}; for (int i=0;i<n;i++) cin>>x[i]>>y[i]>>r[i]; if (n<=5000) { set<vector<int>> se; set<int> rem; for (int i=0;i<n;i++) { se.insert({-r[i],i,x[i],y[i]}); rem.insert(i); } while (!se.empty()) { auto it=se.begin(); vector<int> c=*it;c[0]*=-1; for (int i:rem) if (!ans[i] && inte(c,{r[i],i,x[i],y[i]})) { se.erase({-r[i],i,x[i],y[i]}); ans[i]=c[1]+1; } } } else { int mx=-1e9,mn=-mx; for (int i=0;i<n;i++) mn=min(mn,y[i]),mx=max(mx,y[i]); if (!mn && !mx) { set<pair<int,int>> st,en,rem; for (int i=0;i<n;i++) st.insert({x[i]-r[i],i}),en.insert({x[i]+r[i],i}),rem.insert({-r[i],i}); while (!rem.empty()) { set<int> toer; auto p=*rem.begin(); auto it=st.lower_bound({x[p.second]-r[p.second],0}); auto it1=st.lower_bound({1+x[p.second]+r[p.second],0}); while (it!=it1) { toer.insert((*it).second); it++; } it=en.lower_bound({x[p.second]-r[p.second],0}); it1=en.lower_bound({x[p.second]+r[p.second]+1,0}); while (it!=it1) { toer.insert((*it).second); it++; } for (int i:toer) { ans[i]=p.second+1; st.erase({x[i]-r[i],i}),en.erase({x[i]+r[i],i}),rem.erase({-r[i],i}); } } } } for (int i=0;i<n;i++) cout<<ans[i]<<' '; cout<<endl; 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...