國家集訓隊2012 JZPFAR

2022-03-27 09:58:29 字數 1693 閱讀 7363

平面上有n個點。現在有m次詢問,每次給定乙個點(px, py)和乙個整數k,輸出n個點中離(px, py)的距離第k大的點的標號。如果有兩個(或多個)點距離(px, py)相同,那麼認為標號較小的點距離較大。

第一行,乙個整數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

首道k-d樹

然而只是照著打了個板子qaq

1 #include2 #include3 #include4 #include5 #include6

using

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()

view code

國家集訓隊 旅遊

題目背景 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 發現,有些橋上可以看到美麗的景色,讓人心情愉悅,但有些橋狹...