poj 1065
偏序定理。同3636
代码:
#include<iostream>
#include<fstream>
using namespace std;
struct e{
int w,h;
};
e a[5001];
int n;
int b[5001];
int cmp(const void *a,const void *b){
if(((e *)b)->w-((e*)a)->w!=0)
return ((e *)a)->w-((e*)b)->w;
else
return ((e*)a)->h-((e*)b)->h;
}
int find(int s,int value){
int i=0,k;
while(i<=s)
{
k=(i+s)>>1;
if(b[k]<=value) s=k-1;
else i=k+1;
}
return s;
}
void read(){
// ifstream cin("in.txt");
int i,j,k,m;
cin>>k;
while(k--)
{
cin>>n;
for(i=0;i<n;i++)
cin>>a[i].w>>a[i].h;
qsort(a,n,sizeof(a[0]),cmp);
m=0;
b[0]=a[0].h;
for(i=1;i<n;i++)
{
j=find(m,a[i].h);
b[j+1]=a[i].h;
if(j+1>m) m=j+1;
}
cout<<m+1<<endl;
}
}
int main(){
read();
return 0;
}
浙公网安备 33010602011771号