HDU 3511 圓的掃瞄線

2022-05-24 03:18:09 字數 1185 閱讀 7445

題意:

給了n(n<50000)圓的圓心座標和半徑,任意兩個圓不會相切或者相交,也就是說只存在內含和相離兩種關係,問最深的那個圓被巢狀了多少次。

題解:抄的別人的。。然後自己還不會nlogn的實現。。

後來看別人**,發現,set用的太神了!

比較函式中有乙個變數,但是這個變數的改變並不會影響set的形態!所以不會出問題!

view code

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 

7 #include 8

9#define n 222222

1011

using

namespace

std;

1213

structc14

c[n];

1718

structe19

li[n];

2223

intn,nx,cnt;

2425 inline double gety(int id,int

fg)26

3132

struct

sl33

42};

4344

sets;

45set

::iterator pre,suc,it;

4647 inline void add(c &c,int

id)48

5253 inline bool cmp(const e &a,const e &b)

5458

59 inline void

read()

6068 sort(li+1,li+1+cnt,cmp);69}

7071 inline void

go()

7290 node.fg=-1

; s.insert(node);91}

92else

9397}98

int ans=0;99

for(int i=1;i<=n;i++) ans=max(ans,c[i].w);

100 printf("

%d\n

",ans);

101}

102103

intmain()

104

hdu 3511 圓掃瞄線

給n 50,000 個座標系上的圓,xi,yi,ri。這些圓相互不相交,並且不相切,只有相互無關或者包含的關係。這句話保證了掃瞄線的可行性 求被最深處的圓被其他圓包含了幾次。掃瞄線學習心得 這個部落格寫的好,通俗易懂。用set來維護所謂的上下事件點的關係。優先級別高的處在前面位置。線的優先順序別的確...

POJ 2932 圓掃瞄線

求n個圓中沒有被包含的圓。模仿掃瞄線從左往右掃,到左邊界此時如有3個交點,則有3種情況,以此判定該圓是否被離它最近的圓包含,而交點和最近的圓可以用以y高度排序的set來維護。因此每次到左邊界插入該圓,找該圓最近的兩個圓 上方和下方 判斷是否包含,到右邊界則從set中刪除該圓。date 2017 08...

hdu 1255 覆蓋的面積 掃瞄線

一道挺簡單的題,讓我折騰了許久。主要卡在了更新節點後維護父親節點上。後來思路明確了就很容易了。節點資訊 l,r 區間端點 cnt 區間被覆蓋的次數,cnt 0說明沒有被完全覆蓋。len1 區間被覆蓋的長度 len2 區間至少被兩條線段覆蓋的長度。只要找到父親節點與子節點在len1,len2,cnt的...