/* *Rainto96 *Beijing University of Posts and Telecommunications School of Software Engineering *http://blog.csdn.net/u011775691 */ #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define pb push_back #define ALL(x) x.begin(),x.end() #define VINT vector #define PII pair #define MP(x,y) make_pair((x),(y)) #define ll long long #define ull unsigned ll #define MEM0(x) memset(x,0,sizeof(x)) #define MEM(x,val) memset((x),val,sizeof(x)) #define scan(x) scanf("%d",&(x)) #define scan2(x,y) scanf("%d%d",&(x),&(y)) #define scan3(x,y,z) scanf("%d%d%d",&(x),&(y),&(z)) #define scan4(x,y,z,k) scanf("%d%d%d%d",&(x),&(y),&(z),&(k)) #define Max(a,b) a=max(a,b) #define Min(a,b) a=min(a,b) using namespace std; int f[50555] , g[50555]; struct BIT{ int d[50555]; int n; void clear(){ memset(d,0,sizeof(d)); } int sum(int i){ int s=0; while(i>0){ s+=d[i]; i-=i&-i; } return s; } void add(int i,int x){ while(i<=n){ d[i]+=x; i+=i&-i; } } void show(){ for(int i=1;i<=n;i++) //cout<= th) r = mid; mid = (l + r) / 2; } if(bit.sum(mid) < th) return mid + 1; else return mid; } int main(){ #ifndef ONLINE_JUDGE //freopen("C:/OJ/in.txt","r",stdin); #endif int T; scan(T); while(T--){ int n;scan(n); bit.n = n; bit.clear(); for(int i=0;i vc; for(int i=n-1;i>=0 ; i--){ int th = sum - g[i]; int x = get(th, n); if(x == -1) x/=0; vc.pb(x); bit.add(x, -1); sum--; } reverse(ALL(vc)); for(int i=0 ;i