平面上有n個點。現在有m次詢問,每次給定乙個點(px, py)和乙個整數k,輸出n個點中離(px, py)的距離第k大的點的標號。如果有兩個(或多個)點距離(px, py)相同,那麼認為標號較小的點距離較大。首道k-d樹第一行,乙個整數n,表示點的個數。
下面n行,每行兩個整數x_i, y_i,表示n個點的座標。點的標號按照輸入順序,分別為1..n。
下面一行,乙個整數m,表示詢問個數。
下面m行,每行三個整數px_i, py_i, k_i,表示乙個詢問。
m行,每行乙個整數,表示相應的詢問的答案。
30 0
0 10 2
31 1 2
0 0 3
0 1 131
1
然而只是照著打了個板子qaq
1 #include2 #include3 #include4 #include5 #include6view codeusing
namespace
std;
7 typedef long
longl;8
const
l inf((l)1e16);
9int
now,n,m,k;
10 inline int
read()
19struct
point
24 l &operator(int
x)27 }p[100005
],cmp;
28struct
data
33};
34 priority_queueq;
35inline l pf(l x)
38inline l dis(point x,point y)
41struct
node
49 inline void pushup(node *x)
55inline l cal_dis(),cmp));
58 ret=max(ret,dis((point),cmp));
59 ret=max(ret,dis((point),cmp));
60 ret=max(ret,dis((point),cmp));
61return
ret;62}
63 }*root;
64 inline void build(node *&rt,int l,int r,int
d)76 inline void query(node *rt));
82if(q.size()
83q.push(ret);
84else
85if(ret
86q.pop(),q.push(ret);
87 l dis_l(rt->lch==null?inf:rt->lch->cal_dis());
88 l dis_r(rt->rch==null?inf:rt->rch->cal_dis());
89if(dis_l>dis_r)
94else99}
100 inline int
gg()
115return0;
116}
117int
k(gg());
118int main()
國家集訓隊 旅遊
題目背景 ray 樂忠於旅遊,這次他來到了 t 城。t 城是乙個水上城市,一共有 nn 個景點,有些景點之間會用一座橋連線。為了方便遊客到達每個景點但又為了節約成本,t 城的任意兩個景點之間有且只有一條路徑。換句話說,t 城中只有 n 1n 1 座橋。ray 發現,有些橋上可以看到美麗的景色,讓人心...
國家集訓隊 Tree I
題目 給你乙個無向帶權連通圖,每條邊是黑色或白色。讓你求一棵最小權的恰好有nee dneed need 條白色邊的生成樹。題目保證有解。思路 凸優化裸題,要注意的就是,優先選白色 優先選黑色也行 主要是同一斜率可能會切到很多點,那麼就要有乙個標準,要麼選最小點,要麼選最大。另外求出來的點不一定是ne...
國家集訓隊 旅遊
ray 樂忠於旅遊,這次他來到了 t 城。t 城是乙個水上城市,一共有 n 個景點,有些景點之間會用一座橋連線。為了方便遊客到達每個景點但又為了節約成本,t 城的任意兩個景點之間有且只有一條路徑。換句話說,t 城中只有 n 1 座橋。ray 發現,有些橋上可以看到美麗的景色,讓人心情愉悅,但有些橋狹...