区间合并
给定 n 个闭区间 [ai; bi],其中i=1,2,…,n。任意两个相邻或相交的闭区间可以合并为一个闭区间。例如,[1;2] 和 [2;3] 可以合并为 [1;3],[1;3] 和 [2;4] 可以合并为 [1;4],是[1;2] 和 [3;4] 不可以合并。
我们的任务是判断这些区间是否可以最终合并为一个闭区间,如果可以,将这个闭区间输出,否则输出no。
样例输入
5
5 6
1 5
10 10
6 9
8 10
样例输出
1 10
思路1.
如果区间的端点范围很小,比如在范围[0,9999]。
可以开一个10000大小的bool数组,然后输入区间覆盖的范围都复制true。
则最后遍历数组,连续的true数据即为一个区间。
这种方法适用于区间范围小,区间的平均跨度不是很大
思路2.
首先,按区间的左端点排序
将要考察的区间分为二
考察
左区间能否合并
右区间能否合并
再考察在左右区间能否合并
最小规模的问题
一个区间可以合并
两个区间之间检查
#include <iostream>
#include <algorithm>
using namespace std;
struct block{
int s,e;
};
bool cmp(block f, block e){
if (f.s<e.s