poj 1631

最长不降子序列。

代码:

#include<iostream>
#include<fstream>

using namespace std;

int a[40001],b[40001];


int n;

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;
     cin>>k;
    while(k--){
       cin>>n;
    for(i=0;i<n;i++)
        cin>>a[i];
           
      int  m=0;
        b[0]=a[0];
        for(i=1;i<n;i++)
        {
            j=find(m,a[i]);
            b[j+1]=a[i];
            if(j+1>m) m=j+1;
        }
          
    cout<<m+1<<endl;
 
    }
    
          
}
int main(){
	read();
	return 0;
}

posted on 2011-05-04 19:37  宇宙吾心  阅读(367)  评论(0)    收藏  举报

导航