2648: sjy擺棋子
time limit: 20 sec memory limit: 128 mb
submit: 4914 solved: 1688
[submit][status][discuss]
description
這天,sjy顯得無聊。在家自己玩。在乙個棋盤上,有n個黑色棋子。他每次要麼放到棋盤上乙個黑色棋子,要麼放上乙個白色棋子,如果是白色棋子,他會找出距離這個白色棋子最近的黑色棋子。此處的距離是 曼哈頓距離 即(|x1-x2|+|y1-y2|) 。現在給出n<=500000個初始棋子。和m<=500000個操作。對於每個白色棋子,輸出距離這個白色棋子最近的黑色棋子的距離。同乙個格仔可能有多個棋子。
input
第一行兩個數 n m
以後m行,每行3個數 t x y
如果t=1 那麼放下乙個黑色棋子
如果t=2 那麼放下乙個白色棋子
output
對於每個t=2 輸出乙個最小距離
sample input
2 31 1
2 32 1 2
1 3 3
2 4 2
sample output
hint
kdtree可以過
source
鳴謝 孫嘉裕
sol:
使用kd樹就可以輕鬆的a掉這題
不會重構的kd樹,我的kd樹就是個樸素暴力。
kd樹對加入樹中的點進行劃分,在奇數層按照x座標排序,在偶數層按照y座標排序,可以把多維空間上的點通過有技巧的劃分來大大降低搜尋的複雜度。對於樹上的乙個節點,先把這個節點理論中可能出現的最優解和當前答案比對,如果比答案優則向下拓展。
#include
#include
#include
#include
#include
#include
#include
using namespace std;
const int n=1010000;
const int inf=1e9;
int n,m;
int l[n],r[n];
struct cc
a[n],tr[n];
int dis(cc c,int a,int b)
int f;
bool cmp(cc a,cc b)
void updata(int k)
void build(int &k,int flag,int l,int r)
inline bool cmp_x(int k,int
x)inline bool cmp_y(int k,int
y)void insert(int &k,int flag,int
x,int
y) int d=flag?cmp_y(k,y):cmp_x(k,x);
if(d) insert(r[k],flag^1,x,y);
else insert(l[k],flag^1,x,y);
if(d) d=r[k];
else d=l[k];
tr[k].mix=min(tr[k].mix,tr[d].mix);
tr[k].max=max(tr[k].max,tr[d].max);
tr[k].miy=min(tr[k].miy,tr[d].miy);
tr[k].may=max(tr[k].may,tr[d].may);
}int pre_dis(cc c,int a,int b)
int ans;
void query(int k,int
x,int
y) else
// if(l[k]&&ans>pre_dis(tr[l[k]],x,y)) query(l[k],x,y);
//if(r[k]&&ans>pre_dis(tr[r[k]],x,y)) query(r[k],x,y);
} inline int
read()
int root;
int main()
}
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 SJY擺棋子 k d樹
題目鏈結 思路 二維的k d k dk d樹,查詢的時候其實就是貪心搜尋 剪枝,k d k dk d樹的建樹和查詢網上很多,插入的時候就是暴力插入。可為啥我的暴力插入超時了,話說應該要像替罪羊樹那樣維護k d k dk d樹的平衡性吧。暴力重建 弱剪枝還超時了。include define endl...