/* ID: 1292871202 LANG: C++ */ #pragma comment(linker,"/STACK:102400000,102400000") #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; const int INF = 0x3f3f3f3f; const int MAX = 0x7fffffff; const ll LINF = 0x3f3f3f3f3f3f3f3fLL; const ll LMAX = 0x7fffffffffffffffLL; const double eps = 1e-9; const double pi=acos(-1.0); const int maxn = 100000+5; const int maxm = 100000+5; const int mod = 1e9+7; #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 const int MAXN=500010; int a[MAXN]; int ans[MAXN]; void DP(int n) { vector v; v.clear();v.push_back(a[1]); int len=1; ans[1]=1; for(int i=2;i<=n;++i) { if(a[i]>v[len-1]) { v.push_back(a[i]); len++; ans[i]=len; } else { int fi = lower_bound(v.begin(),v.end(),a[i])-v.begin(); v[fi]=a[i]; ans[i]=fi+1; } } } int main() { //freopen("input.txt","r",stdin); //freopen("output.txt","w",stdout); //cin.sync_with_stdio(false); //cout.sync_with_stdio(false); int t;cin>>t; while(t--) { int n;cin>>n; for(int i=1;i<=n;++i) { scanf("%d",&a[i]); } DP(n); for(int i=1;i<=n;++i) { printf("%d%c",ans[i],i==n?'\n':' '); } } return 0; }