想法是先按照区域左边从小到大排序,然后一个一个判断。
#include<iostream>
#include<algorithm>
using namespace std;
int l,m;
struct Node{
int x,y;
}a[105];
bool cmp(Node a,Node b)
{
return a.x < b.x;
}
int main(void)
{
cin>>l>>m;
l++;
for(int i = 1;i <= m;i++)
{
cin>>a[i].x>>a[i].y;
}
sort(a+1,a+1+m,cmp);
int L = a[1].x;
int R = a[1].y;
l -= (R-L+1);
for(int i = 2;i <= m;i++)
{
if(a[i].x > R)
{
L = a[i].x;
R = a[i].y;
l -= (R-L+1);
}
else if(a[i].x == R)
{
L = a[i].x;
R = a[i].y;
l -= (R-L);
}
else if(a[i].x < R&&a[i].y > R)
{
l -= (a[i].y-R);
R = a[i].y;
}
}
cout<<l<<endl;
return 0;
}