#include #include #define SIZE 100050 using namespace std; int i, j, n, top, tmp , ans; int stack[SIZE]; int main() { int T = 0; scanf("%d",&T); while (T--) { scanf("%d",&n); top = 0; stack[0] = -1; for (i = 1; i <= n; i++) { scanf("%d",&tmp); /* ±èÕ»¶¥ÔaËØ′óêy¾íèëÕ» */ if (tmp > stack[top]) { stack[++top] = tmp; ans = top; } else { int low = 1, high = top; int mid; /* ¶t・Ö¼ìË÷Õ»ÖD±ètemp′óμÄμúò»¸öêy */ while(low <= high) { mid = (low + high) / 2; if (tmp > stack[mid]) low = mid + 1; else high = mid - 1; } stack[low] = tmp; int l = 1 , r = top; while (l < r) { int mid = (l+r+1) / 2; if (stack[mid] <= tmp) l = mid; else r = mid - 1; } ans = l; } if (i == 1) printf("%d",ans); else printf(" %d",ans); } printf("\n"); } return 0; }