#include #include #include using namespace std; const int N = 1000005; int T, n, h[N], hn, a[N]; int bit[N]; #define lowbit(x) (x&(-x)) void add(int x, int v){ while (x <= hn) { bit[x] =max(bit[x], v); x += lowbit(x); } } int get(int x) { int ans = 0; while (x) { ans = max(ans, bit[x]); x -= lowbit(x); } return ans; } int ans[N]; int main() { scanf("%d", &T); while (T--) { scanf("%d", &n); hn = 0; for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); h[++hn] = a[i]; } memset(bit, 0, sizeof(bit)); sort(h + 1, h + hn + 1); hn = unique(h +1, h + hn +1) - h - 1; for (int i = 1; i <= n; i++) { a[i] = lower_bound(h + 1, h + hn + 1, a[i]) - h; ans[i] = get(a[i] - 1) + 1; add(a[i], ans[i]); } for (int i = 1; i <=n;i++)printf("%d%c", ans[i], i == n ? '\n' : ' '); } return 0; }