#include <bits/stdc++.h> #include <utility> #include <vector> using namespace std; int main() { int L,M; while(cin>>L>>M) { vector<pair<int,int>> q; pair<int ,int>one; int Tree_num=L+1;//树的数量=马路长度+1 int remove_num=0;//要移除的树的数量,初始为0 int s,e;//s表示上一个要移除区间的起点,e表示上一个要移除区间的终点 while(M--)//输入M个区间 { cin>>one.first>>one.second; q.push_back(one); } //对区间按照起点排序 sort(q.begin(),q.end(),[](const pair<int, int> &a,const pair<int, int> &b) { return a.first<b.first; }); //先处理第一个区间 s=q[0].first; e=q[0].second; remove_num+=(e-s+1); //处理后面的区间 for(int i=1;i<q.size();i++) { //当前区间被上一个区间包含了 if(q[i].second<=e) continue; //当前区间和上一个区间交叉 if(q[i].first<=e&&q[i].second>e) { remove_num+=(q[i].second-e); e=q[i].second; } //当前区间和上一个区间首尾不相连 if(q[i].first>e) { s=q[i].first; e=q[i].second; remove_num+=(e-s+1); } } cout<<Tree_num-remove_num<<endl; } } // 64 位输出请用 printf("%lld")