区间合并 首先按区间将按左端点从小到大排序
然后标记第一个区间左右端点为a和b
然后从第二个区间遍历 如果当前区间左端点小于等于a 说明包含在a到b中间 则判断是否需要扩大b 取max
如果当前区间左端点大于a 说明区间不包含 减去当前a到b的所有点 要+1
记录当前a和b为左右端点
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+9;
typedef pair<int ,int> pii;
pii arr[N];
bool cmp(pii a,pii b){
return a.first<b.first;
}
int main(){
int L,n;
cin>>L>>n;
for(int i=1;i<=n;i++){
int a,b;
cin>>a>>b;
arr[i]={a,b};
}
sort(arr+1,arr+n+1,cmp);
int res=L+1;
int a=arr[1].first,b=arr[1].second;
for(int i=2;i<=n;i++){
if(arr[i].first<=b){
b=max(b,arr[i].second);
}
else {
res-=(b-a+1);
a=arr[i].first;
b=arr[i].second;
}
}
res-=(b-a+1);
cout<<res<<endl;
return 0;
}