#include #include #include #include #include using namespace std; #define N 100200 #define M 200020 #define mod 1000000007 #define LL long long #define ls (i << 1) #define rs (ls | 1) #define md (ll + rr >> 1) #define lson ll, md, ls #define rson md + 1, rr, rs int n, a[N]; int san[N], cnt; int s[N]; int f[N]; int query(int x) { int ret = 0; while(x) { ret = max(ret, s[x]); x -= x & -x; } return ret; } void upd(int x, int v) { while(x <= cnt) { s[x] = max(s[x], v); x += x & -x; } } int main() { int cas; scanf("%d", &cas); while(cas--) { scanf("%d", &n); cnt = 0; for(int i = 1; i <= n; ++i) { scanf("%d", &a[i]); san[++cnt] = a[i]; } sort(san + 1, san + cnt + 1); cnt = unique(san + 1, san + cnt + 1) - san - 1; for(int i = 1; i <= n; ++i) { a[i] = lower_bound(san + 1, san + cnt + 1, a[i]) - san; } for(int i = 1; i <= cnt; ++i) s[i] = 0; for(int i = 1; i <= n; ++i) { f[i] = query(a[i] - 1) + 1; upd(a[i], f[i]); printf("%d%c", f[i], i == n? '\n': ' '); } } return 0; }