Description
给你\(n\)个闭区间(第\(i\)个为\([l_i, r_i]\)),要求你选出其中\(m\)个,使得他们的交集非空。
你的得分是选出区间中最长的和最短的的长度差。请求出最优解,无解输出\(-1\)。
\(m\leq 200000, 1\leq m\leq n\leq 500000, 0\leq l_i\leq r_i\leq 10^9\)。
Solution
我们首先先把区间按长度排个序再做吧……
然后最大和最小的差,要素察觉(意味深)。two pointers,启动!
我们直接开一棵线段树,来维护每个点在当前使用区间被覆盖了多少次。在全局最大值不小于\(m\)时,开始一边更新答案一遍移动左端点。注意不合法的区间在这里一定比合法的区间答案更劣,所以直接在移动之前无脑更新答案即可。
Code
1 |
|