#include #include #include #include #include #include #include #include #include #include #include #include #define LL long long #define INF 0x7FFFFFFF//or 0x3f3f3f3f ? using namespace std; template inline void read(T& x) { int f = 1; x = 0; char ch = getchar(); while (ch < '0' || ch > '9') {if (ch == '-') f = -1; ch = getchar();} while (ch >= '0' && ch <= '9') {x = x * 10 + ch - '0'; ch = getchar();} x *= f; } /*============ Header Template ============*/ const int N = 100000 + 5; int n, len; int a[N], c[N], p[N], f[N]; int find(int *c, int x) { int l = 0, r = len, ans; while (l <= r) { int m = (l + r) >> 1; if (c[m] < x) { ans = m; l = m + 1; } else r = m - 1; } return ans; } void solve() { for (int i = 1; i <= n - 1; i++) printf("%d ", f[i]); printf("%d\n", f[n]); } int main() { int T; read(T); while (T--) { read(n); for (int i = 1; i <= n; i++) read(a[i]); c[0] = 0; len = 0; for (int i = 1; i <= n; i++) { int pos = find(c, a[i]); c[pos + 1] = a[i]; f[i] = pos + 1; if (pos + 1 > len) len = pos + 1; } solve(); } return 0; }