#21. 区间选点
区间选点
给定 个闭区间 ,请你在数轴上选择尽量少的点,使得每个区间内至少包含一个选出的点。
输出选择的点的最小数量。
位于区间端点上的点也算作区间内。
输入格式
第一行包含整数 ,表示区间数。
接下来 行,每行包含两个整数 ,表示一个区间的两个端点。
输出格式
输出一个整数,表示所需的点的最小数量。
数据范围
,
输入样例:
3
-1 1
2 4
3 5
输出样例:
2
样例:基础正确性(有重叠也有不重叠)。
单区间点 [0,0]:卡边界/初始化(有人输出 0 或漏输出)。
全都相互重叠(嵌套):答案应为 1;卡“每个区间都选点”或不会利用公共交集。
全部互不相交(点区间):答案=N;卡误把不相交当可共用点、或覆盖判断写错。
端点相交链 [1,2],[2,3],[3,4]:端点算覆盖;卡把“端点相交不算”导致点数偏大。
链式重叠但存在公共点(3):[1,3],[2,4],[3,5] 只需 1 个点;卡只看相邻重叠、不看整体公共交集。
大量重复同一区间:答案 1;卡去重/计数错误(可能输出 20)。
嵌套 + 多段不相交混合:既要对嵌套选 1 个点,又要对远处独立段加点;卡逻辑只适用于全重叠或全不重叠的简单情况。
负数区间 + 混合(含嵌套):卡负数比较/排序错误、或只在正数范围测试过。
乱序输入:必须先排序;卡“按输入顺序贪心”会错。
专卡错误贪心:按左端点/选左端点 用例 (1,2),(2,6),(3,4),(5,6):最优 2(选 2 和 6);如果每次选左端点/按左端点贪心,常会变成 3。
专卡覆盖条件写错:把 a > last 写成 a >= last (1,1),(1,2):选点 1 覆盖两者,应为 1;若用 >= 会误判第二个没覆盖而多选 1 个。
点区间 + 端点相交混合:(1,1),(2,2),(2,3);卡对点区间处理、以及端点覆盖(2 覆盖后两者)。
极值 + 大区间桥接:[-1e9,-1e9],[1e9,1e9],[-1e9,1e9]:答案 1;卡极值排序/比较,以及“桥接区间”应一次覆盖。
一个大区间 + 一串小区间:虽然有大区间,但小区间可能要求更多点;卡误以为“有大区间就只要 1 个点”。
相同右端点的一组:如 [1,5],[2,5]...:答案 1;卡排序稳定性/相同右端点处理。
相同左端点不同右端点:如 [0,1]..[0,5]:答案 1;卡有人按左端点排序后错误选点(选到 1 可能仍正确,但一些实现会乱加点)。
多组混合 + 交错重叠:(1,3),(4,6),(2,5) 前三者可用 1 个点(3~5 之间),再加后面的 (7,9),(8,10)、单点 (11,11);卡“分组”与覆盖判断复杂度。
小规模随机(含负数):综合正确性;卡各种边界组合(点区间、短区间、重叠/不重叠)。
N=1000 结构化:100 组互不相交的“组内全重叠”:答案应为 100;卡错误贪心/错误覆盖判断导致偏大或偏小。
N=100000 压力:全不相交点区间:答案 100000;强卡 O(N^2) 做法/慢 I/O。
N=100000 压力:全部完全相同且全覆盖:答案 1;强卡性能 + 计数别爆。
N=100000 压力:连续端点相交链 [i,i+1]:最优约 50000;强卡端点覆盖规则 + 性能(很多人会因为判断写错得到 100000)。
N=100000 压力:随机大范围短区间:综合强测;卡排序/贪心正确性与性能。
专卡比较器/排序用减法溢出(32 位):用极值组合;如果有人在比较函数里写 return b1-b2 或 a1-a2 可能溢出导致排序错,从而答案错。