#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<stack>
using namespace std;
int a[40000+5];
int b[40000+5];
int main()
{
int n,t,len=0;
cin>>t;
while(t--)
{
cin>>n;
len=0;
memset(b,0,sizeof(b));
memset(a,0,sizeof(a));
for(int i=0; i<n; i++)
cin>>a[i];
b[0]=a[0];
for(int i=1; i<n; i++)
{
if(a[i]>b[len])
{
b[++len]=a[i];
}
else
{
int pos=upper_bound(b,b+len,a[i])-b; //二分
b[pos]=a[i];
}
}
cout<<len+1<<endl;
}
}
此代码无法求出最长上升子序列对应的各个数的值