区间合并
将区间按左端点从小到大的顺序排序。如果下一个线段的左端点的大小小于目前最大的右端点,则更新目前的右端点,如果下一个线段的左端点的大小大于目前最大的右端点,则把目前的区间存储,再记录新的区间。
存储区间左右端点用结构体和pair均可。
代码例子算的是区间总长度。
#include <bits/stdc++.h>
using namespace std;
const int N = 110;
int m, n;
struct Segment
{
int l, r;
bool operator< (const Segment& t)const{
return l < t.l;
}
}seg[N];
int main()
{
cin >> m >> n;
for(int i = 0; i < n; i ++) cin >> seg[i].l >> seg[i].r;
sort(seg, seg + n);
int sum = 0;
int L = seg[0].l, R = seg[0].r;
for(int i = 1; i < n; i ++)
{
if(seg[i].l <= R) R = max(R, seg[i].r);
else{
sum += R - L + 1;
L = seg[i].l, R = seg[i].r;
}
}
sum += R - L + 1;
cout << m + 1 - sum << endl;
}