#include const int maxn = 110000; int ans[maxn], a[maxn], b[maxn]; int Search(int i, int len){ int l = 0, r = len, m; while(l < r){ m = l + (r - l) / 2; if(ans[m] >= a[i]) r = m; else l = m + 1; } return l; } int main(){ int T; scanf("%d", &T); for(int ca = 0; ca < T; ca++){ int n; scanf("%d", &n); for(int i = 1; i <= n; i++){ scanf("%d", &a[i]); } ans[1] = a[1]; b[1] = 1; int len = 1; for(int i = 2; i <= n; i++){ if(a[i] > ans[len]){ ans[++len] = a[i]; b[i] = len; } else{ int pos = Search(i, len); ans[pos] = a[i]; b[i] = pos; } } bool first = true; for(int i = 1; i <= n; i++){ if(first) first = false; else printf(" "); printf("%d", b[i]); } printf("\n"); } return 0; }