題意:給定n(n<=100000)個區間(左閉右開)和m(m<=100000)次詢問[l, r],問所有在[l, r]區間內最多有多少個兩兩不相交的區間。,
思路:首先貪心的思想,去除掉包含其他區間的大區間,這樣做肯定不會影響結果。
然後對於所有區間,按照左端點升序排序,那麼由於這時所有區間不相互包含,他們的右端點也是遞增的。
那麼對於每個詢問,肯定是從左到右去盡可能多的區間,這個貪心容易想到。
對數據離散化,記錄從每個點開始的經過i個區間所達到的最近距離,這一步用到了倍增的思想,因為如果一個點一個點順序找,那麼時間復雜度和空間復雜度都無法承受。
具體來說,用f[i][j]記錄從i出發經過2^j個區間所達到的最近點,那麼可以得出遞推關系
f[i][j] = f[ f[i][j-1] ][j-1];
那麼對於每個詢問,我們將詢問ql,qr也離散化,只需找到從ql最多經過多少區間使得其不超過qr即可。
ps:半夜睡不著真是心痛,起來補題.........
#include
#include
#include
#include
#include
#include
#include
#include