#include #include #include #include #include #include #include #include #include #include #include using namespace std; const int MAXN = 1e5+7; int a[MAXN], big[MAXN]; struct node { int L, R, sum; int Mid(){return (L+R)/2;} }t[MAXN*4]; void Build(int r, int L, int R) { t[r].L = L, t[r].R = R; t[r].sum = R-L+1; if(L == R) return ; Build(r<<1, L, t[r].Mid()); Build(r<<1|1, t[r].Mid()+1, R); } int Find(int r, int e) { t[r].sum -= 1; if(t[r].L == t[r].R) return t[r].L; if(e > t[r<<1].sum) return Find(r<<1|1, e-t[r<<1].sum); return Find(r<<1, e); } int main() { int T, N; scanf("%d", &T); while(T--) { scanf("%d", &N); Build(1, 1, N); for(int i=1; i<=N; i++) { scanf("%d", &a[i]); if(i != 1) big[i] = a[i] - a[i-1]; } for(int i=N; i>0; i--) { a[i] = Find(1, i-big[i]); } for(int i=1; i<=N; i++) { printf("%d%c", a[i], i==N ? '\n' : ' '); } } return 0; } /** 5 5 0 0 1 4 4 **/