Guest User

Untitled

a guest
May 17th, 2018
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.73 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. #define pb push_back
  3. #define f first
  4. #define sf second.first
  5. #define ssf second.sf
  6. #define sss second.second.second
  7. #define p4l pair<ll, pair<ll, pair<ll, ll> > >
  8. using namespace std;
  9. typedef long long ll;
  10. const int N=1e5+5;
  11. p4l arr[N];
  12. ll n, ans[N];
  13. bool intersect(p4l a, p4l b)
  14. {
  15.     ll dist=(a.ssf-b.ssf)*(a.ssf-b.ssf)+(a.sss-b.sss)*(a.sss-b.sss);
  16.     ll rad=(a.f+b.f)*(a.f+b.f);
  17.     return dist<=rad;
  18. }
  19. int main()
  20. {
  21.     scanf("%lld", &n);
  22.     for(ll a=1; a<=n; a++)
  23.     {
  24.         scanf("%lld%lld%lld", &arr[a].ssf, &arr[a].sss, &arr[a].f);
  25.         arr[a].sf= -a;
  26.     }
  27.     sort(arr+1, arr+n+1);
  28.     for(ll a=1; a<=n; a++)
  29.         arr[a].sf*=-1;
  30.     ll blocksize=sqrt(n);
  31.     vector<p4l>vec;
  32.     for(ll a=n; a>=1; a--)
  33.     {
  34.         if(ans[arr[a].sf])
  35.             continue;
  36.         bool flag=false;
  37.         for(ll b=0; b<vec.size(); b++)
  38.             if(intersect(vec[b], arr[a]))
  39.             {
  40.                 ans[arr[a].sf]=vec[b].sf;
  41.                 flag=true;
  42.                 break;
  43.             }
  44.         if(flag)
  45.             continue;
  46.         ans[arr[a].sf]=arr[a].sf;
  47.         vec.pb(arr[a]);
  48.         if(vec.size()>=blocksize)
  49.         {
  50.             for(ll b=a-1; b>=1; b--)
  51.             {
  52.                 for(ll c=0; c<vec.size(); c++)
  53.                 {
  54.                     if(ans[arr[b].sf])
  55.                         continue;
  56.                     if(intersect(vec[c], arr[b]))
  57.                     {
  58.                         ans[arr[b].sf]=vec[c].sf;
  59.                         break;
  60.                     }
  61.                 }
  62.             }
  63.             vec.clear();
  64.         }
  65.     }
  66.     for(ll a=1; a<=n; a++)
  67.         printf("%lld ", ans[a]);
  68.     printf("\n");
  69.     return 0;
  70. }
Add Comment
Please, Sign In to add comment