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