#include #include #include #define MAXN 100010 using namespace std; int arr[MAXN],ans[MAXN],len; vector buf; int binary_search(int i){ int left,right,mid; left=0,right=len; while(left=arr[i]) right=mid; else left=mid+1; } return left; } int main() { int T,p,i,j,k; scanf("%d",&T); while(T--){ scanf("%d",&p); buf.clear(); for(i=1; i<=p; ++i) scanf("%d",&arr[i]); ans[1] = arr[1]; len=1; buf.push_back(1); for(i=2; i<=p; ++i){ if(arr[i]>ans[len]){ ans[++len]=arr[i]; buf.push_back(len); } else{ int pos=binary_search(i); // 如果用STL: pos=lower_bound(ans,ans+len,arr[i])-ans; ans[pos] = arr[i]; buf.push_back(pos); } } int size = buf.size(); for(int i = 0; i < size - 1; i++) printf("%d ", buf[i]); printf("%d\n", buf[size-1]); } return 0; }