傳送門
這題好像有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樹...