題意:
給了n(n<50000)圓的圓心座標和半徑,任意兩個圓不會相切或者相交,也就是說只存在內含和相離兩種關係,問最深的那個圓被巢狀了多少次。
題解:抄的別人的。。然後自己還不會nlogn的實現。。
後來看別人**,發現,set用的太神了!
比較函式中有乙個變數,但是這個變數的改變並不會影響set的形態!所以不會出問題!
view code
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include7 #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的...