bzoj2648 sjy擺棋子 kd樹

2021-07-11 09:17:33 字數 962 閱讀 9820

這天,sjy顯得無聊。在家自己玩。在乙個棋盤上,有n個黑色棋子。他每次要麼放到棋盤上乙個黑色棋子,要麼放上乙個白色棋子,如果是白色棋子,他會找出距離這個白色棋子最近的黑色棋子。此處的距離是 曼哈頓距離 即(|x1-x2|+|y1-y2|) 。現在給出n<=500000個初始棋子。和m<=500000個操作。對於每個白色棋子,輸出距離這個白色棋子最近的黑色棋子的距離。同乙個格仔可能有多個棋子。

第一行兩個數 n m

以後m行,每行3個數 t x y

如果t=1 那麼放下乙個黑色棋子

如果t=2 那麼放下乙個白色棋子

對於每個t=2 輸出乙個最小距離

2 31 12 3

2 1 2

1 3 3

2 4 212

kdtree可以過

題解:比較裸的kd樹.

插入點的時候暴力走到底即可.

**:

#include#include#include#include#include#define n 600010

#define inf 2100000000

using namespace std;

int n,x,y,f,opt,rt,m;

struct use

friend bool operator<(use a,use b)

int getmn(use a)

return ans;

} void qmn(int x)

} else

}update(k);

} void ins(int x,int y)

int query(int x,int y)

}kd;

int main()

rt=kd.build(1,n,0);

for (int i=1;i<=m;i++)

else

}}

bzoj2648 SJY擺棋子 k d樹

這天,sjy顯得無聊。在家自己玩。在乙個棋盤上,有n個黑色棋子。他每次要麼放到棋盤上乙個黑色棋子,要麼放上乙個白色棋子,如果是白色棋子,他會找出距離這個白色棋子最近的黑色棋子。此處的距離是 曼哈頓距離 即 x1 x2 y1 y2 現在給出n 500000個初始棋子。和m 500000個操作。對於每個...

BZOJ2648 SJY擺棋子 k d樹

題目鏈結 思路 二維的k d k dk d樹,查詢的時候其實就是貪心搜尋 剪枝,k d k dk d樹的建樹和查詢網上很多,插入的時候就是暴力插入。可為啥我的暴力插入超時了,話說應該要像替罪羊樹那樣維護k d k dk d樹的平衡性吧。暴力重建 弱剪枝還超時了。include define endl...

bzoj2648 kd樹 SJY擺棋子

2648 sjy擺棋子 time limit 20 sec memory limit 128 mb submit 4914 solved 1688 submit status discuss description 這天,sjy顯得無聊。在家自己玩。在乙個棋盤上,有n個黑色棋子。他每次要麼放到棋盤上...