1 #include<stdio.h> 2 int a[100005],b[100005],maxlen[100005]; 3 void sort(int l,int r) 4 { 5 int i,j,x,y,x1,y1; 6 i=l; j=r; 7 x=a[(i+j)/2]; x1=b[(i+j)/2]; 8 while (i<=j) 9 { 10 while ((a[i]<x)||(a[i]==x&&b[i]<x1)) i++; 11 while ((x<a[j])||(x==a[j]&&x1<b[j])) j--; 12 if (i<=j) 13 { 14 y=a[i]; a[i]=a[j]; a[j]=y; 15 y=b[i]; b[i]=b[j]; b[j]=y; 16 i++; j--; 17 } 18 } 19 if (l<j) sort(l,j); 20 if (i<r) sort(i,r); 21 } 22 int main() 23 { 24 int t,i,j,n,max; 25 while (~scanf("%d",&t)) 26 while (t--) 27 { 28 scanf("%d",&n); 29 for (i=1;i<=n;i++) scanf("%d%d",&a[i],&b[i]); 30 sort(1,n); 31 for (i=1;i<=n;i++) 32 { 33 max=0; 34 for (j=1;j<i;j++) 35 if (b[j]>b[i]&&maxlen[j]>max) max=maxlen[j]; 36 maxlen[i]=max+1; 37 } 38 max=0; 39 for (i=1;i<=n;i++) 40 if (maxlen[i]>max) max=maxlen[i]; 41 printf("%d\n",max); 42 } 43 }
http://acm.hdu.edu.cn/showproblem.php?pid=1051