K D tree 解決K遠點對問題

2022-05-07 21:03:09 字數 2372 閱讀 7905

• 通過 k-d tree 和乙個優先佇列,可以查詢距離乙個欽定點第 k 遠的點。

• 具體

操作看起來似乎比較暴力。

1. 首先將 k 個 「 空 」 的值存入佇列。

2. 暴力 dfs k-d tree 更新佇列。

• 所有點對中的第 k 遠點對顯然只需要將佇列全域性化。

1 #include2

#define ll long long

3#define ls son[u][0]

4#define rs son[u][1]

5#define inf 1e9

6using

namespace

std;

7int

n,m,root,opt;

8int pos[100050

];9 ll val[100050][2],x[2

];10 ll l[100050][2],r[100050][2

];11

int son[100050][2

];12

struct

node

1320 }num[100050

];21 priority_queueq;

22void

calc_push(node u)

2327

bool cmp(int a,int b)

28void pushup(int

u)2935}

36void build(int &u,int l,int r,int

k)37

46ll dou(ll u)

4750

void calc_point(int

u)51

54void calc_kd(int

u)55

61void query(int

u)62

73else

7478}79

intmain()

8090 build(root,1,n,0

);91 scanf("

%d",&m);

92while(m--)

93);

97query(root);

98 printf("

%d\n

",q.top().pos);99}

100return0;

101 }

view code

p4357 [cqoi2016]k遠點對

一組詢問,k 較大。

1 #include2

#define ll long long

3#define ls son[u][0]

4#define rs son[u][1]

5#define inf 1e9

6using

namespace

std;

7int

n,m,root,opt;

8 ll dis[100050

];9 ll x[100050][2],y[2

];10 ll l[100050][2],r[100050][2

];11

int pos[100050

];12

int son[100050][2

];13 priority_queue, greater>q;

14bool cmp(int a,int b)

15void pushup(int

u)1622}

23void build(int &u,int l,int r,int

k)24

32ll dou(ll u)

3336

void calc_point(int

u)37

40void calc_kd(int

u)41

47void query(int

u)48

56calc_kd(ls);

57calc_kd(rs);

58if(dis[ls]>dis[rs])

5963

else

6468}69

intmain()

7079 build(root,1,n,0

);80

while(m--) q.push(0

);81

for(int i=n;i>=1;--i)

8287 printf("

%lld

",q.top());

88return0;

89 }

view code

Luogu P4357K遠點對(寄蒜幾盒)

題目鏈結 考慮旋轉卡殼求出乙個最遠點對之後刪掉其中乙個點,把該點到其餘所有點的距離存進堆裡 最後堆輸出答案。我的 只有在開o2的情況下才不會re。為啥?include include include include include define maxn 300020 using namespace...

STL 排序類 解決第k大問題

前言 相信我們會遇到過在一堆無序的數字中,問你第k大的數字是哪乙個或者第k小的數字。當然,最簡單的做法就是排序,然後直接輸出第k大的數字,這樣的話時間複雜度約為n 3 2 給定乙個長度為n的整數數列,以及乙個整數k,請用快速選擇演算法求出數列的第k小的數是多少。輸入格式 第一行包含兩個整數 n 和 ...

解決4K屏電腦顯示問題

在科技飛速發展的年代,4k螢幕不斷成為電視 電腦廣告的亮點功能,它在顯示效果上,確實效果不錯,如下圖。但是,在電腦上使用是否會影響眼睛的健康問題,還沒有權威的論證。畢竟4k高畫質螢幕還不是主流,很多軟體對相容性不是好,導致顯示異常。預設顯示解析度和縮放比例如下 在win10系統中,可以通過調整 高d...