#include #include #include using namespace std; typedef long long LL; int n,in[100005],b[100005],cc=0; int bit[100005]; int qry(int x) { if(x<1)return 0; int ans=0; while(x) { ans=max(ans,bit[x]); x-=x&-x; } return ans; } void update(int x,int v) { while(x<=100000) { bit[x]=max(bit[x],v); x+=x&-x; } } int main() { int T; scanf("%d",&T); while(T--) { scanf("%d",&n); for(int i=1;i<=n;++i) { scanf("%d",in+i); b[i]=in[i]; } sort(b+1,b+1+n); cc=unique(b+1,b+1+n)-b; memset(bit,0,sizeof(bit)); for(int i=1;i<=n;++i) { in[i]=lower_bound(b+1,b+cc,in[i])-b; int t=qry(in[i]-1)+1; if(i>1)putchar(' '); printf("%d",t); update(in[i],t); } putchar('\n'); } return 0; }