#include #include #include using namespace std; const int N = 100005; int test, n, tot, a[N], b[N]; int A[N], f[N]; void add(int a, int b) { for (int i = a; i <= tot; i += (i & -i)) { A[i] = max(A[i], b); } } int ask(int a) { int ret = 0; for (int i = a; i; i -= (i & -i)) { ret = max(ret, A[i]); } return ret; } void work() { scanf("%d", &n); for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); b[i] = a[i]; } sort(b + 1, b + n + 1); tot = unique(b + 1, b + n + 1) - b - 1; for (int i = 1; i <= n; i++) { a[i] = lower_bound(b + 1, b + tot + 1, a[i]) - b; } for (int i = 1; i <= tot; i++) { A[i] = 0; } for (int i = 1; i <= n; i++) { f[i] = ask(a[i] - 1) + 1; add(a[i], f[i]); } for (int i = 1; i <= n; i++) { printf("%d%c", f[i], i == n ? '\n' : ' '); } } int main() { scanf("%d", &test); while (test--) { work(); } return 0; }