题目链接
题意
马路上有一些值周同学,两个同学的间隔是1米。要踹走一些区域的人。区域用它们在数轴上的起始点和终止点表示。现在要把这些区域中的人(包括端点处的两个人)赶走。计算将这些人都赶走后,马路上还有多少个人。
思路
- 数据范围很大不能使用数组
- 把区间递增排序,然后遍历处理
参考代码
#include<bits/stdc++.h>
using namespace std;
struct node
{
int a,b;
};
node aa[1000100];
int cmp(node a, node b)
{
return a.a<b.a;
}
int main()
{
int l,m;
cin>>l>>m;
for(int i=0;i<m;i++)
{
cin>>aa[i].a>>aa[i].b;
}
sort(aa,aa+m,cmp);
int pos=0;
int ans=l+1;
for(int i=0;i<m;i++)
{
if(pos<aa[i].a)
{
ans-=aa[i].b-aa[i].a+1;
pos=aa[i].b+1;
}
else if(pos>=aa[i].a&&pos<=aa[i].b)
{
ans-=aa[i].b-pos+1;
pos=aa[i].b+1;
}
}
cout<<ans<<endl;
}