Advertisement
RaFiN_

closest pair of points in 2D plane

Aug 16th, 2019
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.95 KB | None | 0 0
  1. /*closest pair of points in 2D plane */
  2.  
  3. bool comp(const pii &a,const pii &b){
  4.     return a.ss< b.ss;
  5. }
  6.  
  7. pii v[MAX];
  8.  
  9. ll closest_pair(pii arr[],int N){
  10.     // return square of closest pair of point
  11.  
  12.     ll best=1e18;
  13.     set<pii> box;
  14.     box.insert(arr[1]);
  15.  
  16.  
  17.     int left=1;
  18.     for(int i=2;i<=N;++i){
  19.         while(left<i && arr[i].ss- arr[left].ss > sqrt(best)){
  20.             box.erase(arr[left++]);
  21.         }
  22.         int cnt=0;
  23.         for(auto it= box.lower_bound({arr[i].ff-sqrt(best),0}); it!=box.end() && arr[i].ff+sqrt(best) >= it->ff;it++){
  24.             ll cy=arr[i].ff- it->ff;
  25.             ll cx= arr[i].ss- it->ss;
  26.             ll d= 1LL*cx*cx + 1LL*cy*cy;
  27.             best=min(best,d);
  28.         }
  29.         box.insert(arr[i]);
  30.  
  31.     }
  32.     return best;
  33. }
  34.  
  35.  
  36. int main()
  37. {
  38.     booster()
  39.     ///read("input.txt");
  40.  
  41.     int n;
  42.     cin>>n;
  43.  
  44.     for(int i = 1;i<=n;i++){
  45.         cin>>v[i].ff;// ff => y cordinate
  46.         v[i].ff += v[i-1].ff ;
  47.         v[i].ss = i;
  48.     }
  49.  
  50.     cout<<closest_pair(v,n);
  51.  
  52.  
  53.     return 0;
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement