1. 程式人生 > 實用技巧 >題解 P4416 【[COCI2017-2018#1] Plahte】

題解 P4416 【[COCI2017-2018#1] Plahte】

珂朵莉樹吼哇,我永遠喜歡珂朵莉.jpg

題目連結

Solution [COCI2017-2018#1] Plahte

題目大意:給定\(n\)個互不相交(可能包含)的矩形,以及\(m\)個有顏色的點。詢問每個矩形內部的點有多少種不同的顏色

dsu on tree,掃描線


分析:關鍵的條件是互不包含,也就是我們把每個矩形和最小的包含它的矩形連邊,那麼會形成一棵森林。

這個可以用掃描線來完成,從左往右掃

  • 如果一個線段\([l,r]\)是矩形的左邊界,那麼就將這個矩形和原來\([l,r]\)內代表的矩形連邊。之後我們將\([l,r]\)賦值為該矩形

  • 如果一個線段\([l,r]\)是矩形的右邊界,那麼我們就將\([l,r]\)

    這段賦值為該矩形的父親

點當做矩形處理即可,注意邊界問題。如果點和左邊界橫座標相同,優先處理左邊界

維護線段樹(珂朵莉樹好寫.jpg)

這樣我們建出一棵樹,直接dsu on tree即可

程式碼使用了右值引用等特性,請-std=c++11