bzoj2716 Violet 3 天使玩偶

2021-08-03 13:07:50 字數 1410 閱讀 5889

傳送門

這題好像有cdq分治做法

不過我太菜了沒聽懂

於是我打了一發kdtree

度娘:

k-d樹(k-dimensional樹的簡稱),是一種分割k維資料空間的資料結構。主要應用於多維空間關鍵資料的搜尋(如:範圍搜尋和最近鄰搜尋)。k-d樹是二進位制空間分割樹的特殊的情況。

大概思路就是每次確定乙個軸,將點集平均分成兩份,再遞迴建樹。

至於怎麼劃分:

我們可以按照方差最大的方案來做。

但是會產生這樣的情況:

所以我們強制每一次劃分座標必須和上一次不同。

然後長成這樣:

這就好看多了。

每一次插入我們按照劃分順序找到乙個新的節點,並且插入進去。

好像可以類似於替罪羊樹的思路來保證時間複雜度。

對於每一詢問最近節點,我們可以大力求出邊界離要求的點p最近的部分先遞迴,再遞迴較遠的部分。

但是會出現這種情況:

這樣時間複雜度會退化到o(n^2)

但是你要相信出題人是不會來卡你的kdtree的

做這題就是kdtree的簡單應用。

看著**理解一下,你會發現我是選擇看hzwer的、

#include

#include

#include

#include

#include

#include

using

namespace

std;

int n,m,fl,x,y,rt,d;

struct lzh

bool

operator

}p[500005];

int dis(lzh a,lzh b)

struct lzh

if (t[k].r)}}

int build(int l,int r,int now)

int get(int k,lzh p)

void insert(int k,int now)

}else

}update(k);

}void ask(int k,int now)

else

}int ask(lzh p)

void insert(lzh p)

}lzh;

int main()

}

BZOJ2716 Violet 3 天使玩偶

bzoj2716 violet 3 天使玩偶 試題描述 輸入 輸出 輸入示例 第乙個測試點,我就不拿來佔頁面了 輸出示例 同上資料規模及約定 題目中給的範圍不對。交上去re。我目測大概 n,m 600000,xi,yi 107.題解 出題人cnbb!1.資料超大,時限 80 sec,出題人惡意卡測評...

BZOJ2716 Violet 3 天使玩偶

題解 通過取絕對值考慮後 發現是乙個較複雜的cdq 突然考慮距離問題 用kdtree寫也是可行的 但是.會退化 所以我們考慮用替罪羊樹來防止退化 include include include include include include include include include inclu...

BZOJ2716 天使玩偶

乙個平面直角座標系,座標 1 le x,y le10 6 n n le10 6 次操作,操作包含以下兩種 新增乙個點 x,y 詢問離 x,y 最近的點的距離。分別統計左下 左上 右上 右下的最近的點,每次使用cdq分治。樹狀陣列維護最小值。有乙個一樣的題是sjy擺棋子,不過cdq會被卡,需要用kd樹...