#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef unsigned long long ul; typedef vector vi; typedef pair pii; #define rep(i,l,r) for(int i=l;i<(r);++i) #define per(i,l,r) for(int i=r-1;i>=(l);--i) #define sz(x) ((int)((x).size())) #define sqr(x) ((ll)(x)*(x)) #define all(x) (x).begin(),(x).end() #define mp make_pair #define pb push_back #define fi first #define se second #define de(x) cout << #x << " = " << x << endl; #define debug(x) freopen(x".in", "r", stdin); #define setIO(x) freopen(x".in", "r", stdin);freopen(x".out", "w", stdout); const ll LINF = 1e18 + 7; const ul BASE = 33; const int N = 1e5 + 7; const int INF = 1e9 + 7; const int MOD = 1000000007; const double Pi = acos(-1.); const double EPS = 1e-8; ll kpow(ll a, ll b) { ll ret = 1; for (; b; b >>= 1, a = a * a) if (b & 1) ret = ret * a; return ret; } //--------------head-------------- int n, a[N], f[N], b[N]; vi V; struct Fenwick { int n, c[N]; void init(int _n) { n = _n; rep(i, 0, n + 1) c[i] = 0; } void upd(int i, int v) { while (i <= n) { c[i] = max(c[i], v); i += i & -i; } } int qry(int i) { int ret = 0; while (i > 0) { ret = max(ret, c[i]); i -= i & -i; } return ret; } } fw; int main() { int T; scanf("%d", &T); rep(cas, 0, T) { scanf("%d", &n); V.clear(); rep(i, 1, n + 1) scanf("%d", &a[i]), V.pb(a[i]); sort(all(V)); V.erase(unique(all(V)), V.end()); fw.init(sz(V)); rep(i, 1, n + 1) a[i] = lower_bound(all(V), a[i]) - V.begin() + 1; rep(i, 1, n + 1) { f[i] = fw.qry(a[i] - 1) + 1; fw.upd(a[i], f[i]); } rep(i, 1, n + 1) { if (i - 1) putchar(' '); printf("%d", f[i]); } puts(""); } return 0; }