Submission #407679

#TimeUsernameProblemLanguageResultExecution timeMemory
407679amunduzbaev원 고르기 (APIO18_circle_selection)C++14
7 / 100
1218 ms65288 KiB
#include "bits/stdc++.h" using namespace std; #define pb push_back #define int long long #define pii pair<int, int> #define ff first #define ss second #define sz(x) (int)x.size() #define all(x) x.begin(), x.end() #define lb lower_bound #define ub upper_bound const int N = 3e5+5; const int M = 5e3+5; const int mod = 1e9+7; int n, m, k, a[N]; int rr[N]; pii p[N]; bool cmp(pii a, pii b){ if(a.ff != b.ff) return a.ff > b.ff; return a.ss < b.ss; } int sq(int x) { return x * x; } int dis(int i, int j){ pii a = p[i], b = p[j]; return sqrt(sq(a.ff - b.ff) + sq(a.ss - b.ss)); } signed main(){ cin>>n; if(n <= 5000) { vector<pii> tt; for(int i=0;i<n;i++) cin>>p[i].ff>>p[i].ss>>a[i], tt.pb({a[i], i}); sort(all(tt), cmp); for(auto x : tt){ if(rr[x.ss]) continue; for(int i=0;i<n;i++){ if(rr[i]) continue; if(dis(x.ss, i) <= a[x.ss] + a[i]) rr[i] = x.ss+1; } } } else { vector<pii> tt; for(int i=0;i<n;i++) cin>>p[i].ff>>p[i].ss>>a[i], tt.pb({a[i], i}); sort(all(tt), cmp); set<pii> ss; for(int i=0;i<n;i++) ss.insert({p[i].ff - a[i], i}), ss.insert({p[i].ff + a[i], i}); for(auto x : tt){ if(rr[x.ss]) continue; int l = p[x.ss].ff - x.ff, r = p[x.ss].ff + x.ff; auto lx = ss.find(make_pair(l, x.ss)); vector<pii> er; while(lx != ss.end() && (*lx).ff <= r) er.pb(*lx), rr[(*lx).ss] = x.ss + 1, lx++; for(auto x : er) ss.erase(x); } } for(int i=0;i<n;i++) cout<<rr[i]<<" "; cout<<"\n"; 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...