题意:给定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