#20. 区间合并
区间合并
给定 个区间 ,要求合并所有有交集的区间。
注意如果在端点处相交,也算有交集。
输出合并完成后的区间个数。
例如: 和 可以合并为一个区间 。
输入格式
第一行包含整数 。
接下来 行,每行包含两个整数 和 。
输出格式
共一行,包含一个整数,表示合并区间完成后的区间个数。
数据范围
,
输入样例:
5
1 2
2 4
5 6
7 8
7 9
输出样例:
3
样例:基础正确性(既有端点相交 [1,2]+[2,4],也有部分重叠与独立段)。
n=1 单区间:卡初始化/边界(有人忘记处理最后一个区间导致 0 或空输出)。
两个完全不相交:卡把不相交也合并、或排序/判定条件写错。
端点相交必须合并 [1,2] & [2,3]:专卡把条件写成 l < curR 而不是 l <= curR。
多段“链式端点相交/重叠”:卡只合并一次、不做持续扩展(如合并后没更新右端点或没继续合并)。
嵌套区间(大区间包含小区间):卡“只要遇到新区间就计数+1”、或错误地把嵌套当作新段。
完全相同区间重复多次:卡去重/计数错误(可能输出 10 而不是 1)。
负数区间 + 部分重叠 + 独立段:卡负数比较/排序错误、或只考虑正数范围。
负数端点相交 [-5,-3] & [-3,-1]:同 #4,但在负数上再卡一次(防止有人只在正数上测试过)。
跨越 0 + 乱序输入 + 需要整体合并:区间是 (-3,1),(2,4),(1,2),应合成 (-3,4);卡没排序、或只合并相邻输入行。
乱序 + 多组混合(既要合并也要分段):卡“按输入顺序合并”、或排序后合并逻辑错误。
极值点区间 [-1e9,-1e9] 与 [1e9,1e9]:卡边界/溢出/排序稳定性问题;也卡把差值当 key 导致溢出的写法。
一个超大区间覆盖全部 + 若干点在内部/边缘:应最终 1 段;卡“内部区间也计数”、或合并时被内部区间错误截断。
交替重叠形成多组:例如 (1,2)(3,4)(2,3) 这一组会合成 (1,4),另一组 (10,11)(12,13)(11,12) 合成 (10,13),再加单点 (20,20);卡“没有传递合并”。
很多点区间 (i,i):卡把点区间当空区间忽略、或读入时 r==l 处理错。
大量小区间连续相接形成长链:应最终 1 段;卡“只合并重叠不合并端点”、或合并时右端点更新错导致断开。
大量完全不相交(间隔固定):应输出 n;卡误把“间隔 1/2”也当成相交、或判定写成 l <= curR + 1 之类(把相邻但不相交也合并了)。
靠一个大区间桥接把多段连起来:(1,2)(4,5)(7,8)(2,7) 应合成 1 段;卡只合并相邻区间、或没正确更新后续可合并范围。
专卡 l<curR vs l<=curR 的混合:(1,1)(2,2)(1,2) 应合成 1 段;卡错误比较导致分裂。
只有端点“相邻但不相交”的点区间:(1,1)(2,2) 应输出 2;卡把“相邻”当“相交”(写成 l <= curR+1 的那类)。
重复端点 + 乱序 + 多组合并:如 (1,2)(2,2)(2,3)(3,3) 要合并成 (1,3),以及 (9,10)(10,10) 要合并;卡排序、以及右端点更新与计数错位。
n=1000 中等规模随机(含大量局部重叠与跳跃):综合正确性 + 性能;卡 O(n^2) 扫描/每次找能合并的区间导致慢。
n=100000 压力:全部链式相交((i,i+1)):应输出 1;强卡性能与端点合并规则(<=)。
n=100000 压力:全部不相交((2i,2i)):应输出 100000;卡误合并/性能/输出整型范围。
n=100000 压力:大范围随机区间(长度 0..1000,l 在 [-1e9,1e9]):综合强测;卡排序+合并的总体性能与各种边界组合(点区间/短区间/重叠概率高)。