这题用下标也能拿满分,但如果数据再大一点,超过2000到3000个数,
就超时了,所以我们要用结构体或计时器的方法做。
结构体:
#include<bits/stdc++.h>
using namespace std;
struct qj
{
int l,r;
}s[10009];
bool cmp(qj x,qj y)
{
return x.l<y.l;
}
int n,q,p,ans;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)cin>>s[i].l>>s[i].r;
sort(s+1,s+1+n,cmp);
s[n+1].l=10000000000;
q=s[1].l;
p=s[1].r;
for(int i=2;i<=n+1;i++)
{
if(s[i].l>p+1)
{
ans++;
q=s[i].l;
p=s[i].r;
}
else p=max(p,s[i].r);
}
cout<<ans;
return 0;
}
计时器:
#include<bits/stdc++.h>
using namespace std;
int n,x,y,s[1000009],t[1000009],ans;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>x>>y;
s[x]++;
s[y+1]--;
}
for(int i=1;i<=1000000;i++)
{
t[i]=t[i-1]+s[i];
if(t[i]==0&&t[i-1]!=0)ans++;
}
cout<<ans;
return 0;
}
计时器的方法更短,所以建议大家也用计时器的方法去做。