解題思路:
(1)快速排序,x升序,y升序
(2)倒序遍歷
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
struct monkey
{
int x,y;
};
monkey v[50010];
int cmp(const void * a,const void *b)
{
if((*(struct monkey*)a).x - (*(struct monkey*)b).x < 0) //x升序
return -1;
else if((*(struct monkey*)a).x - (*(struct monkey*)b).x == 0) //y升序
return (*(struct monkey*)a).y - (*(struct monkey*)b).y;
return 1;
}
int main()
{
while(true)
{
int n;
scanf("%d",&n);
if(n==0)
break;
for(int i=0;i<n;i++)
scanf("%d%d",&v[i].x,&v[i].y);
int ans = 0;
qsort(v,n,sizeof(v[0]),cmp);
int max_y = v[n-1].y;
ans++;
for(int i=n-2;i>=0;i--)
if(v[i].y > max_y)
{
ans++;
max_y = v[i].y;
}
printf("%d\n",ans);
}
return 0;
}