#define _CRT_SECURE_NO_WARNINGS
#include <utility>
#include <string.h>
#include <string>
#include <math.h>
#include <stack>
#include <set>
#include <map>
#include <queue>
#include <deque>
#include <iterator>
#include <iostream>
#include <vector>
#include <algorithm>
#include <unordered_map>
#include <bitset>
#include <time.h>
#include <stdlib.h>
using namespace std;
const long long INF = 1ll << 32;
const double PI = acos(-1);
typedef long long ll;
typedef long double ld;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<bool> vb;
typedef pair<int, int>pi;
typedef pair<ll, ll>pl;
typedef vector<pi>vpi;
typedef vector<pl>vpl;
typedef vector<vi> vvi;
typedef vector<vb> vvb;
typedef vector<vl> vvl;
typedef vector<string> vs;
int dc[] = { 0,0,1,-1 }, dr[] = { 1,-1,0,0 };
#define all(v) (v).begin(),(v).end()
#define rall(v) (v).rbegin(),(v).rend()
#define read(v) for (int it = 0; it < v.size(); it++) {scanf("%d", &v[it]);}
#define print(v) for(auto it : v) printf("%d ", it); puts("");
#define readL(v) for (int it = 0; it < v.size(); it++) scanf("%lld", &v[it]);
#define printL(v) for (auto it : v) printf("%lld ", it); puts("");
#define readC(v) for (int it = 0; it < v.size(); it++) {scanf("%c", &v[it]);}
#define printC(v) for(auto it : v) printf("%c ", it); puts("");
void build() {
}
bool check(int i, int j, int val1, int val2) {
return ((i - j) <= (val2 + val1));
}
void solve() {
int n;
scanf("%d", &n);
vi v(n), mx(n);
for (int i = 0; i < n; i++) {
scanf("%d", &v[i]);
if (!i || v[i] >= v[mx[i - 1]])
mx[i] = i;
else
mx[i] = mx[i - 1];
}
for (int i = 0; i < n; i++) {
int l = 0, r = n - 1, mid;
while (l <= r) {
mid = (l + r) / 2;
if (check(i, mx[mid], v[mx[mid]], v[i]))
r = mid - 1;
else
l = mid + 1;
}
int ans = mx[mid];
if (!check(i, ans, v[ans], v[i]) && mid < n-1)
ans = mx[mid + 1];
if (!check(i, ans, v[ans], v[i]))
ans = -2;
ans++;
printf("%d ", ans);
}
puts("");
}
int main(void) {
int t = 1;
scanf("%d", &t);
build();
while (t--)
solve();
return 0;
}
Copy