日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

P4357-[CQOI2016]K远点对【K-Dtree】

發(fā)布時間:2023/12/3 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 P4357-[CQOI2016]K远点对【K-Dtree】 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

正題

題目鏈接:https://www.luogu.com.cn/problem/P4357


題目大意

平面上給出nnn個點,求第kkk遠的點對距離。


解題思路

K-Dtree\text{K-Dtree}K-Dtree的模板題,但是這里只有二維,大概是每次根據(jù)一個維度把nnn個點分成兩半像線段樹一樣丟到下面繼續(xù)分治的思想來構建一棵樹。

那么這樣分割出來的每個節(jié)點的點分割了自己的矩形范圍成了兩個子節(jié)點的矩形范圍。

這題的話我們就先構造出K-Dtree\text{K-Dtree}K-Dtree然后記錄一下每個節(jié)點的矩形范圍。

之后開一個小根堆,里面先丟2k2k2k000(因為會算重),然后每次找到的一個點對距離如果比堆頂大就要換一個新的進堆就好了。

這樣就保證了堆里存的是前2k2k2k大的點對了,之后每次用矩形范圍判斷一下新的答案是否在某個子節(jié)點的矩形里面。

沒有插入所以可以不用暴力重構


code

#include<cstdio> #include<cstring> #include<algorithm> #include<cstdlib> #include<queue> #define ll long long #define pw(x) ((x)*(x)) using namespace std; const ll N=4e5+10,inf=1e18; struct point{ll x[2]; }w[N],p[N]; ll n,k,cnt,opt,mx[N][2],mi[N][2],ls[N],rs[N]; priority_queue<ll> q; bool cmp(point x,point y) {return x.x[opt]<y.x[opt];} ll gdis(point x,point y) {return pw(x.x[0]-y.x[0])+pw(x.x[1]-y.x[1]);} ll limd(point x,ll y) {return max(pw(x.x[0]-mx[y][0]),pw(x.x[0]-mi[y][0]))+max(pw(x.x[1]-mx[y][1]),pw(x.x[1]-mi[y][1]));} void PushUp(ll x){ll l=ls[x],r=rs[x];mx[x][0]=mi[x][0]=w[x].x[0];mx[x][1]=mi[x][1]=w[x].x[1];if(l){for(ll i=0;i<2;i++)mx[x][i]=max(mx[x][i],mx[l][i]);for(ll i=0;i<2;i++)mi[x][i]=min(mi[x][i],mi[l][i]);}if(r){for(ll i=0;i<2;i++)mx[x][i]=max(mx[x][i],mx[r][i]);for(ll i=0;i<2;i++)mi[x][i]=min(mi[x][i],mi[r][i]);}return; } void Build(ll &x,ll l,ll r,ll z){if(l>r)return;x=++cnt;ll mid=(l+r)>>1;opt=z;nth_element(p+l,p+mid,p+r+1,cmp);w[x]=p[mid];Build(ls[x],l,mid-1,z^1);Build(rs[x],mid+1,r,z^1);PushUp(x);return; } void Query(ll x,point v){if(!x)return;ll dl=-inf,dr=-inf;if(ls[x])dl=limd(v,ls[x]);if(rs[x])dr=limd(v,rs[x]);ll dis=gdis(w[x],v);if(dis>-q.top())q.pop(),q.push(-dis);if(dl>dr){if(dl>-q.top())Query(ls[x],v);if(dr>-q.top())Query(rs[x],v);}else{if(dr>-q.top())Query(rs[x],v);if(dl>-q.top())Query(ls[x],v);}return; } signed main() {scanf("%lld%lld",&n,&k);for(ll i=1;i<=n;i++)scanf("%lld%lld",&p[i].x[0],&p[i].x[1]);ll rt;Build(rt,1,n,0);for(ll i=1;i<=2*k;i++)q.push(0);for(ll i=1;i<=n;i++)Query(1,p[i]);printf("%lld\n",-q.top()); } 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結

以上是生活随笔為你收集整理的P4357-[CQOI2016]K远点对【K-Dtree】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 黄色片网站国产 | 欧美人与禽猛交乱配 | av永久免费观看 | 色呦呦在线免费观看 | 啪啪免费网址 | 国产一级片av | 日本黄色网络 | 伊人99re| 黑人巨大av | 日韩a级片| 风流老熟女一区二区三区 | 国产高清免费 | 日韩色图视频 | 黄色在线观看视频网站 | 有码在线视频 | 久久精品丝袜高跟鞋 | 鲁大师私人影院在线观看 | 视频在线观看你懂的 | 亚洲另类一区二区 | 美国黄色一级毛片 | 亚洲精品成a人 | 黑人狂躁日本妞hd | 青青视频免费在线观看 | 中文字字幕一区二区三区四区五区 | 岛国裸体写真hd在线 | 黄色毛毛片 | 欧美一级不卡 | 在线观看精品视频 | 午夜天堂在线观看 | 黄色片免费网站 | 在线视频麻豆 | 一本久道综合色婷婷五月 | 亚洲丝袜在线观看 | 国产一区二区综合 | 亚洲aa | 亚洲一区在线不卡 | 亚洲欧美另类国产 | www网站在线观看 | 北条麻妃久久精品 | 国产视频精品久久 | 国产在线视频网址 | 成人av网站免费 | 夜夜草网站 | 国产做爰视频免费播放 | 亚洲天堂一区二区三区四区 | 色噜噜狠狠一区二区三区牛牛影视 | 四虎精品在线观看 | 国产欧美不卡 | 日日操夜夜干 | 九九在线免费视频 | 国产大屁股喷水视频在线观看 | 白丝av | 国产精品v欧美精品v日韩精品 | 国产a级精品 | 婷婷色图 | 色偷偷欧美 | 亚洲无人区码一码二码三码的含义 | 91干网| 97青草| 97超碰人人草 | 青青草超碰在线 | 欧美怡红院视频一区二区三区 | www.综合色| 亚洲天堂99 | 午夜成人免费影院 | www.白丝 | 亚洲精品一区二区18漫画 | 在线播放视频高清在线观看 | 免费吸乳羞羞网站视频 | 亚洲九九色 | 亚洲蜜桃视频 | 免费看污视频的网站 | 精品人妻无码中文字幕18禁 | 不卡精品| 国产免费脚交足视频在线观看 | 免费色站 | 黑人操日本女人 | 国产麻豆一区二区 | 欧美精品免费一区二区三区 | 大咪咪dvd | 金鱼妻日剧免费观看完整版全集 | 国产剧情av在线 | 国产精品九九热 | 岛国视频一区 | 亚洲综合在线网 | 国产激情网址 | 亚洲国产精品一区二区三区 | 国产精品麻豆成人av电影艾秋 | 久久av无码精品人妻系列试探 | 蜜臀av无码一区二区三区 | 国产成人久久久 | 国产av一区精品 | 亚洲一线av | 成人午夜一区 | 五月婷婷开心中文字幕 | 性视频免费看 | 人人射影院 | 老熟妇毛茸茸 | 在线观看精品 |