左端点算法
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
const int N=100010;
typedef pair<int,int> PII;
int n;
PII a[N];
int main()
{
scanf("%d",&n);
for(int i=0;i<n;++i)
{
int x,y;
scanf("%d%d",&x,&y);
a[i]={x,y};
}
sort(a,a+n);
int res=0;
int r=-2e9;
for(int i=0;i<n;++i)
{
if(a[i].first>r)
{
res++;
r=a[i].second;
}
else if(a[i].second<r)
{
r=a[i].second;
}
}
printf("%d",res);
return 0;
}
右端点算法
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
using namespace std;
const int N=100010;
typedef pair<int,int> PII;
int n;
PII a[N];
bool cmp(PII x,PII y)
{
return x.second<y.second;
}
int main()
{
scanf("%d",&n);
for(int i=0;i<n;++i)
{
int x,y;
scanf("%d%d",&x,&y);
a[i]={x,y};
}
sort(a,a+n,cmp);
int res=0;
int r=-2e9;
for(int i=0;i<n;++i)
{
if(a[i].first>r)
{
res++;
r=a[i].second;
}
}
printf("%d",res);
return 0;
}