#include #include #include #include using namespace std; const int N = 123456; int ans[N], a[N]; int lowbit(int x) { return x & (-x); } int c[N]; int cnt; void insert(int x,int y) { for (int i = x; i < cnt + 5; i += lowbit(i)) c[i] = max(c[i], y); } int query(int x) { int ans = 0; for (int i = x; i > 0; i -= lowbit(i)) ans = max(ans, c[i]); return ans; } int b[N]; int main() { int t; scanf("%d", &t); while (t--) { int n; scanf("%d", &n); int maxn = 0; for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); b[i] = a[i]; } sort(b + 1, b + n + 1); cnt = 1; for (int i = 2; i <= n; i++) if (b[i] != b[cnt]) b[++cnt] = b[i]; for (int i = 0; i < cnt + 5; i++) c[i] = 0; for (int i = 1; i <= n; i++) { int lt = 1, rt = cnt, mid, pos = -1; while (lt <= rt) { mid = (lt + rt) >> 1; if (b[mid] == a[i]) { pos = mid; break; } else if (b[mid] > a[i]) rt = mid - 1; else lt = mid + 1; } int p = query(pos - 1) + 1; insert(pos, p); printf("%d", p); if (i == n) printf("\n"); else printf(" "); } } return 0; }