#include #include #include #include #include #include #include #include #include #define inf (1<<30) #define INF (1ll<<62) #define prt(x) cout<<#x<<":"<void sc(T &x){ int f=1;x=0;char c; while(c=getchar(),c<48)if(c=='-')f=-1; do x=x*10+(c^48); while(c=getchar(),c>47); x*=f; } templatevoid nt(T x){ if(!x)return; nt(x/10);putchar('0'+x%10); } templatevoid pt(T x){ if(x<0)putchar('-'),x=-x; if(!x)putchar('0'); else nt(x); } int n,tot; const int maxn=100005; int a[maxn],b[maxn],c[maxn]; struct BIT{ int v[maxn]; void init(){ memset(v,0,tot+1<<2); } void update(int x,int f){ for(;x<=tot;x+=x&-x) v[x]=max(v[x],f); } int query(int x){ int res=0; for(;x;x-=x&-x) res=max(res,v[x]); return res; } }bit; void solve(){ sc(n); for(int i=1;i<=n;i++)sc(a[i]),b[i]=a[i]; sort(b+1,b+n+1); tot=unique(b+1,b+n+1)-b-1; for(int i=1;i<=n;i++)a[i]=lower_bound(b+1,b+tot+1,a[i])-b; bit.init(); for(int i=1;i<=n;i++){ c[i]=bit.query(a[i]-1)+1; bit.update(a[i],c[i]); } for(int i=1;i<=n;i++)pt(c[i]),putchar(" \n"[i==n]); } int main(){ // freopen("pro.in","r",stdin); // freopen("chk.out","w",stdout); int cas;sc(cas); while(cas--)solve(); return 0; }