区间的交
题目来源
孙耀峰Segment_Tree.pdf 原创
题目描述
- 给定nnn个区间,[li,ri][l_i,r_i][li,ri],可以选出其中一些区间,设选出tottottot个,令xxx表示这tottottot个区间交的长度.
- 求min{x,tot}min\{x,tot\}min{x,tot}
- n≤105,1≤xi≤yi≤nn \le 10^5,1 \le x_i \le y_i \le nn≤105,1≤xi≤yi≤n
题目解答
我们发现当tottottot增大时xxx会减小,具有单调性.
我们把线段看成是平面上二维的点(l,r)(l,r)(l,r).
那么我们考虑从小到大枚举线段的交的右端点RRR,如果,交线段的长度为xxx,那么交线段左端点就是L=R−x+1L=R-x+1L=R−x+1,而所有包含这个交线段的线段(此时被表示成了数点)我们可以用一颗线段树来维护,因此我们可以很快的在线段树上找到所有l≤L且r≥Rl \le L 且 r \ge Rl≤L且r≥R的点的个数,这些个数就是tottottot.
考虑到x=R−L+1x = R-L+1x=R−L+1是一个关于LLL减函数,而tottottot则是关于LLL的增函数.
也就是说,随着LLL的增大,xxx在增大,tottottot在减小,则显然答案min{x,tot}min\{x,tot\}min{x,tot}在满足x≤totx \le totx≤tot最大的LLL时取得最大值tottottot.
考虑到单调性,我们使用二分法,可以很快的找到对于一个RRR,满足x≤totx \le totx≤tot最大的LLL.
原题解
下面是孙耀峰聚聚的题解