麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

[模版] K/最近鄰匹配(KD Tree)

2019-11-10 19:15:07
字體:
供稿:網(wǎng)友

nth_element相當(dāng)于快排的split/choose pivot過程

2D 最近

#include <bits/stdc++.h>#define mem(a,b) memset(a,b,sizeof(a))const int INF=0x3f3f3f3f;const int maxn=1e5+50;typedef long long ll;using namespace std;int cmpNo;struct Node{ int x[2],l,r,id; bool Operator <(const Node &b)const{ return x[cmpNo]<b.x[cmpNo]; }};ll calDis(Node &l,Node &r){ ll dx=l.x[0]-r.x[0],dy=l.x[1]-r.x[1]; return dx*dx+dy*dy;}Node p[maxn];int Build(int l,int r,int d){ if(l>r)return 0; cmpNo=d; int mid=l+r>>1; nth_element(p+l,p+mid,p+r+1); p[mid].l=Build(l,mid-1,1-d); p[mid].r=Build(mid+1,r,1-d); return mid;}ll ansDist;int ansId;void Kth(int l,int r,Node &tar,int d){ if(l>r)return; int mid=l+r>>1; if(p[mid].id!=tar.id){ ll tmp=calDis(p[mid],tar); if(tmp<ansDist){ ansDist=tmp; ansId=p[mid].id; } } long long t=tar.x[d]-p[mid].x[d]; if(t<=0){ Kth(l,mid-1,tar,1-d); if(ansDist>t*t) Kth(mid+1,r,tar,1-d); } else{ Kth(mid+1,r,tar,1-d); if(ansDist>t*t) Kth(l,mid-1,tar,1-d); }}Node a[maxn];int main(){ int T; scanf("%d",&T); for(int cs=1;cs<=T;cs++) { int n; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d %d",&p[i].x[0],&p[i].x[1]); p[i].id=i; a[i]=p[i]; } Build(1,n,0); for(int i=1;i<=n;i++) { ansDist=1e18; Kth(1,n,a[i],0); K維 Q近#include <bits/stdc++.h>#define mem(a,b) memset(a,b,sizeof(a))const int INF=0x3f3f3f3f;const int maxn=4e5+50;typedef long long ll;using namespace std;int cmpNo;const int K=2;struct Node{ int x[K],l,r,id; bool operator <(const Node &b)const{ return x[cmpNo]<b.x[cmpNo]; }};long long Dis(const Node &a,const Node &b){ long long ret=0; for(int i=0;i<K;i++) ret+=(a.x[i]-b.x[i])*(a.x[i]-b.x[i]); return ret;}Node p[maxn];int Build(int l,int r,int d){ if(l>r)return 0; cmpNo=d; int mid=l+r>>1; nth_element(p+l,p+mid,p+r+1); p[mid].l=Build(l,mid-1,(d+1)%K); p[mid].r=Build(mid+1,r,(d+1)%K); return mid;}priority_queue<pair<ll,int> >q;void Kth(int l,int r,Node tar,int k,int d){ if(l>r)return; int mid=l+r>>1; if(p[mid].id!=tar.id){ pair<ll,int>v=make_pair(Dis(p[mid],tar),p[mid].id); if(q.size()==k && v<q.top())q.pop(); if(q.size()<k)q.push(v); } ll t=tar.x[d]-p[mid].x[d]; if(t<=0){ Kth(l,mid-1,tar,k,(d+1)%K); if(q.top().first>t*t) Kth(mid+1,r,tar,k,(d+1)%K); } else{ Kth(mid+1,r,tar,k,(d+1)%K); if(q.top().first>t*t) Kth(l,mid-1,tar,k,(d+1)%K); }}Node a[maxn];ll calDis(Node &l,Node &r){ ll dx=l.x[0]-r.x[0],dy=l.x[1]-r.x[1]; return dx*dx+dy*dy;}const int Q=2;int main(){ int T; scanf("%d",&T); for(int cs=1;cs<=T;cs++) { int n; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d %d",&p[i].x[0],&p[i].x[1]); p[i].id=i; a[i]=p[i]; } Build(1,n,0); for(int i=1;i<=n;i++) { while(!q.empty()) q.pop(); for(int j=0;j<Q;j++) q.push(make_pair(1e18,-1)); Kth(1,n,a[i],Q,0); while(!q.empty()){ printf("%lld/n",calDis(a[i],a[q.top().second])); q.pop(); } } } return 0;}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 一级毛片在线免费播放 | av在线在线 | 欧美精品欧美 | 欧美性生交xxxxx久久久缅北 | 久久国产精品久久久久久 | 欧美区在线 | 毛片免费观看完整版 | 中文字幕精品一二三四五六七八 | 久久精品视频8 | 国产精品毛片va一区二区三区 | 日本一区二区久久 | av成人免费 | 国产69精品久久久久99尤 | 韩国精品视频在线观看 | vidz 98hd| 国产高清美女一级毛片久久 | 久久精品站 | 成人毛片在线 | 天天看天天摸天天操 | 久久里面有精品 | 久久久一区二区精品 | 欧美日韩在线视频一区二区 | 国产成人综合在线视频 | 免费色片 | 欧美一级不卡视频 | 久久久久久中文字幕 | 99国产精品国产免费观看 | 91羞羞 | 国产一级一级片 | 亚洲91精品| 九九热在线视频观看 | 美女视频黄视大全视频免费网址 | 精品亚洲夜色av98在线观看 | 久久久久久免费 | 亚洲午夜国产 | 成人黄色小视频在线观看 | 国产精品成人久久久久a级 av电影在线免费 | 玩偶姐姐 在线观看 | 羞羞草视频| 久久久午夜电影 | 欧美亚成人 |