仔细看题想想就是个贪心题,两个sort就可以解决了
#include<stdio.h> #include<string.h> #include<math.h> #include<time.h> #include<iostream> #include<ctype.h> #include<map> #include<set> #include<string> #include<vector> #include<algorithm> #include<stdlib.h> #include<queue> #include<stack> using namespace std; struct DD { int a,b; }A[100005]; int cmp(DD x,DD y) { if(x.a==y.a) return x.b<y.b; return x.a<y.a; } int cmp2(DD x,DD y) { if(x.b==y.b) return x.a<y.a; return x.b<y.b; } int main() { int n,i,j; while(~scanf("%d",&n)) { for(i=0;i<n;i++) scanf("%d%d",&A[i].a,&A[i].b); sort(A,A+n,cmp); int n1=1; int w=A[0].a; int e=A[0].b; for(i=1;i<n;i++) { if(A[i].a>e) { e=A[i].b; n1++; } } sort(A,A+n,cmp2); int n2=1; int qq=A[0].b; for(i=1;i<n;i++) { if(A[i].a>qq) { n2++; qq=A[i].b; } } printf("%d ",max(n1,n2)); } }