HihoCoder 1421(四叉樹,模板)

2021-09-29 06:50:00 字數 3390 閱讀 5065

提供傳入vector的建構函式,可高效查詢圓形區域的點列表。每塊葉子區域點數限制為總數的根號級別。

// hihocoder - 1421

//quadtree 叫四叉樹,看起來類似於區域線段樹

#include

#include

#include

#include

using

namespace std;

struct node

void

print()

cout << endl;}}

;class

quadtree

;quadtree::

quadtree()

quadtree::

quadtree

(const vectorint,

int>>

& p)

for(

int i =

0; i < p.

size()

; i++

)push

(root, p, range_x, range_y)

;split

(root);}

quadtree::

quadtree

(const vectorint,

int>>

& p,

int set_limit)

for(

int i =

0; i < p.

size()

; i++

)push

(root, p, range_x, range_y)

;split

(root);}

quadtree::

~quadtree()

inline

bool quadtree::

is_inrange

(int pos, pair<

int,

int>range)

inline

bool quadtree::

is_inrange

(pair<

int,

int>point, pair<

int,

int>o,

int r)

inline

bool quadtree::

is_inrange

(node* rt, pair<

int,

int>o,

int r)

void quadtree::

del(node* rt)

void quadtree::

split

(node* rt)

else

if(rt-

>ul-

>p.

size()

> limit)

// ur

push

(rt-

>ur, rt-

>p,

make_pair

(mid_x +

1, rt-

>range_x.second)

,make_pair

(mid_y +

1, rt-

>range_y.second));

if(rt-

>ur-

>p.

size()

==0)else

if(rt-

>ur-

>p.

size()

> limit)

// dl

push

(rt-

>dl, rt-

>p,

make_pair

(rt-

>range_x.first, mid_x)

,make_pair

(rt-

>range_y.first, mid_y));

if(rt-

>dl-

>p.

size()

==0)else

if(rt-

>dl-

>p.

size()

> limit)

// dr

push

(rt-

>dr, rt-

>p,

make_pair

(mid_x +

1, rt-

>range_x.second)

,make_pair

(rt-

>range_y.first, mid_y));

if(rt-

>dr-

>p.

size()

==0)else

if(rt-

>dr-

>p.

size()

> limit)

}void quadtree::

push

(node *rt,

const vectorint,

int>>

& p, pair<

int,

int>range_x, pair<

int,

int>range_y)

rt->range_x = range_x;

rt->range_y = range_y;

}void quadtree::

getpointlist

(node* rt, pair<

int,

int>o,

int r, vectorint,

int>>

& ans)

return;}

if(rt-

>p.

size()

<= limit)

}return;}

if(rt-

>dl !=

null)if

(rt-

>dr !=

null)if

(rt-

>ul !=

null)if

(rt-

>ur !=

null)}

vectorint,

int>> quadtree::

getpointlist

(pair<

int,

int>o,

int r)

void quadtree::

add(pair<

int,

int>point)

// not ok

intmain()

quadtree ans =

quadtree

(p);

while

(m--

)}

hihoCoder1687 向量叉積

時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 給定平面上n個點p1 x1,y1 p2 x2,y2 pn xn,yn 請你從中找到兩個不同的點pi和pj滿足 其他所有點都在pi和pj連線的同一側 可以在連線上 如果有多組答案滿足條件,你可以輸出任意一組。第一行包含乙個整數n...

hihocoder 1317 搜尋四 跳舞鏈

題目鏈結 題意 題解 dfs就能過吧.在選取的時候 把選取的這一行,佔據的列,列的權值 1 按列搜 在搜第col列的時候,前i 1列保證有且只有乙個行佔據著 如果選擇的某一行,在前col 1列有格仔 則不能選它 否則修改這一列以及這一列後面的列的權值 在搜某一列的時候,如果發現它的權值為1 則不用搜...

hihocoder收割機14第四題

時間限制 20000ms 單點時限 2000ms 記憶體限制 256mb 描述主宰尤涅若擁有一招非常厲害的招式 劍刃風暴,無論是戰士還是法師,都害怕尤涅若的武士刀劍技 現在戰場上有n名敵對英雄,他們的位置分別為 xi,yi 而劍刃風暴的傷害範圍是乙個半徑為r的圓形,尤涅若可以選擇乙個座標作為劍刃風暴...