https://codeforces.com/contest/1555
题意:
给出(n)个区间([l_i,r_i]),每个区间有一个权值(w_i)。
询问一种选择区间的方案,使得选取区间的最大权值和最小权值的差最小,同时选取的区间覆盖([1,m])的所有点。
题解:
将区间按照权值从小到大排序。
然后对区间序列做一个尺取,因为我们求的是差最小的方案,固定起点的情况下可以确定一个最近的终点作为这个起点的答案,然后把起点往后推一格,新起点的终点只可能在当前终点之后,往后扫到新的满足条件的终点即可。
如何判断当前选取的集合是否可以覆盖所有点:维护一颗线段树,每选择一个序列就在线段树上区间+1,不选择一个序列就在线段树上区间-1。判断的时候查询([1,m])的最小值是否大于0即可。
时间复杂度(O(nlogn))。