2019年山东省赛H题,题源ZOJ。
给$n$个线段$[l,r]$,可以在这$n$条线段上放置小球,但限制同一位置$pos$只能在$1$条线段上放球,问最多可以有多少线段被至少$1$个小球覆盖。
$n \le 10^5,1\le l \le r \le 10^9$
day6
思路
首先由于$[l,r]$的范围很大,却不能离散化处理,所以不妨想到用动态开点的线段树维护哪些位置被放过小球了。
首先对$n$条线段进行排序,按照”$r$小,$r$相同$l$小”的方式排序,原因是:
- r小的情况下,剩余的[r+1,inf]更多,能够给出更多空间;
- l小的情况下,可以充分利用[1,l]的空间,从而给[l+1,r]留出更多空间。
然后显然要每次对线段进行查询,查询的是区间内最靠左的未被覆盖过的位置,通过动态开点线段树实现,时间复杂度为$O(nlogn)$。
代码
1 |
|