bzoj2648 SJY擺棋子 k d樹

2021-08-14 18:58:14 字數 987 閱讀 4369

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

kdtree可以過

hint已經很良心了,這題實際上和2714是一樣的,練手

#include 

#include

#include

#define rep(i,st,ed) for (int i=st;i<=ed;++i)

#define min(x,y) ((x)<(y)?(x):(y))

#define max(x,y) ((x)>(y)?(x):(y))

const

int inf=0x3f3f3f3f;

const

int n=1000005;

struct treenodet[n];

int d,root,ans;

int read()

bool cmp(treenode a,treenode b)

void update(int x,int y)

int get_dis(int now,int x,int y)

void query(int now,int x,int y)

now=t[now].l;

} else

now=t[now].r;

}d^=1;

}}int buildtree(int l,int r,int dd)

int main(void)

root=buildtree(1,n,0);

rep(i,1,m) else

}return

0;}

bzoj2648 sjy擺棋子 kd樹

這天,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個黑色棋子。他每次要麼放到棋盤上...