题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1677
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXN 20002
struct node
{
int w,h;
}dolls[MAXN];
int dp[MAXN];
int cmp(const void *x,const void *y)
{
if((*(struct node *)y).w==(*(struct node *)x).w)
return (*(struct node *)x).h-(*(struct node *)y).h;
else
return (*(struct node *)y).w-(*(struct node *)x).w;
}
int main()
{
int test,n,i,j,k,left,right,mid,lenmax;
scanf("%d",&test);
while(test--)
{
memset(dp,0,sizeof(dp));
scanf("%d",&n);
for(i=0;i<n;++i)
scanf("%d %d",&dolls[i].w,&dolls[i].h);
qsort(dolls,n,sizeof(dolls[0]),cmp);
lenmax=0;
for(i=0;i<n;++i)
{
left=0;
right=lenmax;
while(left<right)
{
mid=(left+right)/2;
if(dp[mid]<=dolls[i].h)
left=mid+1;
else
right=mid;
}
dp[left]=dolls[i].h;
if(left==lenmax)
lenmax++;
}
printf("%d\n",lenmax);
}
return 0;
}