#include #include #include #include #include #include #include using namespace std; typedef long long LL; typedef double db; int a[100004]; int b[100005]; int bit[100005]; int low(int p){ return p&(-p); } void merg(int p,int n,int k){ while(p<=n){ bit[p]=max(bit[p],k); p=p+low(p); } } int sum(int p){ int s=0; while (p) { s=max(s,bit[p]); p=p-low(p); } return s; } int main() { int t; cin>>t; while(t--){ int n; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); b[i]=a[i]; bit[i]=0; } sort(b+1,b+1+n); for(int i=1;i<=n;i++){ a[i]=lower_bound(b+1,b+1+n,a[i])-b; int w=sum(a[i]-1)+1; if(i!=1) printf(" "); printf("%d",w); merg(a[i],n,w); } printf("\n"); } }