poj 3636
偏序定理。
注意
1. 偏序定理。
2. 最长递减子序列的nlogn算法。
3.qosrt是不稳定排序。
代码:
#include<iostream> #include<fstream> using namespace std; struct e{ int w,h; }; e a[20001]; int n; int b[20001]; 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*)b)->h-((e*)a)->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; }