#include #include #include #include #include #include #include #include #include #include #define eps 1e-8 #define ms(a) memset(a,0,sizeof(a)) #define msf(a) memset(a,-1,sizeof(a)) #define N 100010 #define M 998244353 #define INF (1e9+7) #define MID ((L+R)>>1) #define LOOK cout<<"dsaga\n" #define zero(x)((x>0? x:-x)<1e-15) using namespace std; int a[N],b[N],n,f[N]; int MX[N*4]; int query(const int &x,const int &y,int L,int R,int num){ if(x>y) return 0; if(x<=L && R<=y) return MX[num]; if(y<=MID) return query(x,y,L,MID,num<<1); else if(x>MID) return query(x,y,MID+1,R,num<<1|1); return max(query(x,y,L,MID,num<<1),query(x,y,MID+1,R,num<<1|1)); } void modi(const int &x,const int &value,int L,int R,int num){ // cout<MID) modi(x,value,MID+1,R,num<<1|1); else modi(x,value,L,MID,num<<1); } int real[N]; int DISC_len; int DISC_FIND(int x){ int l=0,r=DISC_len-1; while(l!=r){ int mid=(l+r)>>1; if(real[mid]>=x) r=mid; else l=mid+1; } return l; } void DISC(){ sort(real,real+n);//大小需要改 DISC_len=unique(real,real+n)-real;//不包括右端点 //一上基本不改动了 for(int i=1;i<=n;++i) a[i]=DISC_FIND(a[i]); } int main(){ int T; scanf("%d",&T); for(int cas=1;cas<=T;++cas){ ms(MX); scanf("%d",&n); for(int i=1;i<=n;++i) scanf("%d",&a[i]),real[i-1]=a[i]; DISC(); for(int i=1;i<=n;++i){ f[i]=query(0,a[i]-1,0,DISC_len-1,1)+1; modi(a[i],f[i],0,DISC_len-1,1); } for(int i=1;i