Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*closest pair of points in 2D plane */
- bool comp(const pii &a,const pii &b){
- return a.ss< b.ss;
- }
- pii v[MAX];
- ll closest_pair(pii arr[],int N){
- // return square of closest pair of point
- ll best=1e18;
- set<pii> box;
- box.insert(arr[1]);
- int left=1;
- for(int i=2;i<=N;++i){
- while(left<i && arr[i].ss- arr[left].ss > sqrt(best)){
- box.erase(arr[left++]);
- }
- int cnt=0;
- for(auto it= box.lower_bound({arr[i].ff-sqrt(best),0}); it!=box.end() && arr[i].ff+sqrt(best) >= it->ff;it++){
- ll cy=arr[i].ff- it->ff;
- ll cx= arr[i].ss- it->ss;
- ll d= 1LL*cx*cx + 1LL*cy*cy;
- best=min(best,d);
- }
- box.insert(arr[i]);
- }
- return best;
- }
- int main()
- {
- booster()
- ///read("input.txt");
- int n;
- cin>>n;
- for(int i = 1;i<=n;i++){
- cin>>v[i].ff;// ff => y cordinate
- v[i].ff += v[i-1].ff ;
- v[i].ss = i;
- }
- cout<<closest_pair(v,n);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement