題目鏈結
思路:
二維的k−d
k-dk−
d樹,查詢的時候其實就是貪心搜尋+剪枝,k−d
k-dk−
d樹的建樹和查詢網上很多,插入的時候就是暴力插入。可為啥我的暴力插入超時了,話說應該要像替罪羊樹那樣維護k−d
k-dk−
d樹的平衡性吧。暴力重建+弱剪枝還超時了。
#include#define endl "\n"
typedef long long ll;
const int maxn = 1e6 + 100;
const int inf = 1e9 + 10;
const double alpha = 0.75;
using namespace std;
const int max = 100000;
char buf[max], *ps = buf, *pe = buf + 1;
inline void rnext()
template inline bool in(t &ans) while(!isdigit(*ps) && ps != pe);
if(ps == pe) return false;//eof
do while(isdigit(*ps) && ps != pe);
ans *= f;
return true;
}char bufout[max], outtmp[50],*pout = bufout, *pend = bufout + max;
inline void write()
inline void out_char(char c)
inline void out_str(char *s)
}template inline void out_int(t x)
if(x < 0) x = -x,out_char('-');
int len = 0;
while(x)
outtmp[len] = 0;
for(int i = 0, j = len - 1; i < j; i++,j--) swap(outtmp[i],outtmp[j]);
out_str(outtmp);
}struct point
void input()
bool operator < (point p) const
} p[maxn];
struct kd_tree kd[maxn];
int n, m, t, kase = 1, stk[maxn], cnt;
inline void update(int o)
}inline bool need_build(int o)
void dfs(int o, int &tot)
inline void create_node(int &o, point now, int sp)
void build(int &o, int l, int r, int sp)
inline int get_dis(point p1, point p2)
inline bool enter(int o, int ans, point now, int now_dis, int sp)
return true;
}void min_distance(int o, point now, int sp, int &ans)
void insert(int &o, point now, int sp)
now.split = sp;
int s = kd[o].p < now;
insert(kd[o].son[s], now, sp ^ 1);
update(o);
if(!need_build(o)) return ;
int tot = 0; dfs(o, tot);
build(o, 0, tot - 1, sp);
}int main()
in(n); in(m);
kd[0].size = 0;
for(int i = 0; i < n; i++) p[i].input();
int root;
build(root, 0, n - 1, 0);
for(int i = 0, flag, x, y; i < m; i++)
}write();
return 0;
}
bzoj2648 sjy擺棋子 kd樹
這天,sjy顯得無聊。在家自己玩。在乙個棋盤上,有n個黑色棋子。他每次要麼放到棋盤上乙個黑色棋子,要麼放上乙個白色棋子,如果是白色棋子,他會找出距離這個白色棋子最近的黑色棋子。此處的距離是 曼哈頓距離 即 x1 x2 y1 y2 現在給出n 500000個初始棋子。和m 500000個操作。對於每個...
bzoj2648 SJY擺棋子 k d樹
這天,sjy顯得無聊。在家自己玩。在乙個棋盤上,有n個黑色棋子。他每次要麼放到棋盤上乙個黑色棋子,要麼放上乙個白色棋子,如果是白色棋子,他會找出距離這個白色棋子最近的黑色棋子。此處的距離是 曼哈頓距離 即 x1 x2 y1 y2 現在給出n 500000個初始棋子。和m 500000個操作。對於每個...
bzoj2648 kd樹 SJY擺棋子
2648 sjy擺棋子 time limit 20 sec memory limit 128 mb submit 4914 solved 1688 submit status discuss description 這天,sjy顯得無聊。在家自己玩。在乙個棋盤上,有n個黑色棋子。他每次要麼放到棋盤上...