n其实就是排列的康托展开形式
s[i]就是未出现的数中 第s[i]+1小的数
树状数组存小于x的数的个数
#include<bits/stdc++.h>
using namespace std;
int c[50010],k;
inline int lowbit(int x)
{
return x&(-x);
}
int sum(int x)
{
int ans=0;
while(x) {
ans+=c[x];
x-=lowbit(x);
}
return ans;
}
void add(int x,int num)
{
while(x<=k) {
c[x]+=num;
x+=lowbit(x);
}
}
int t;
int main()
{
scanf("%d",&t);
while(t--) {
scanf("%d",&k);
int a;
for(int i = 1; i <= k; ++i) add(i,1);
for(int i = 0; i < k; ++i) {
scanf("%d",&a);
int l=1,r=k;
while(l<r) {
int mid=(l+r)/2;
if(sum(mid)>=a+1) {
r=mid;
}
else {
l=mid+1;
}
}
if(i) printf(" ");
printf("%d",l);
add(l,-1);
}
printf("\n");
}
return 0;
}