Code: Definitely Larger
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
vector<int> p(n), d(n);
for (int i = 0; i < n; ++i) cin >> p[i];
for (int i = 0; i < n; ++i) cin >> d[i];
vector<int> order; // indices in descending q-order (highest q first)
order.reserve(n);
bool ok = true;
for (int i = n - 1; i >= 0; --i) {
int bigger_right = 0;
for (int idx : order) {
if (p[idx] > p[i]) ++bigger_right;
}
if (d[i] > bigger_right) {
ok = false;
break;
}
int need_before = d[i];
int seen = 0;
int pos = static_cast<int>(order.size()); // insert at end by default
if (need_before == 0) {
pos = 0;
} else {
for (int j = 0; j < (int)order.size(); ++j) {
if (p[order[j]] > p[i]) ++seen;
if (seen == need_before) {
pos = j + 1; // right after the need_before-th qualifying index
break;
}
}
}
order.insert(order.begin() + pos, i);
}
if (!ok) {
cout << -1 << '\n';
continue;
}
vector<int> q(n);
for (int pos = 0; pos < n; ++pos) {
q[order[pos]] = n - pos;
}
for (int i = 0; i < n; ++i) {
if (i) cout << ' ';
cout << q[i];
}
cout << '\n';
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
void solve() {
int N;
cin >> N;
vector<int> P(N);
for (int i = 0; i < N; i++) {
cin >> P[i];
P[i]--;
}
vector<int> D(N);
for (int i = 0; i < N; i++) {
cin >> D[i];
}
vector<int> Q(N, -1);
for (int i = N - 1; i >= 0; i--) {
vector<int> vals;
for (int j = i + 1; j < N; j++) {
if (P[j] > P[i]) {
vals.push_back(Q[j]);
}
}
sort(vals.rbegin(), vals.rend());
if (D[i] > (int)vals.size()) {
cout << -1 << '\n';
return;
}
// 5 4 3 2 1
int nval = (D[i] == (int)vals.size()) ? 0 : (vals[D[i]] + 1);
for (int &x : Q) {
if (x >= nval)
x++;
}
Q[i] = nval;
}
for (int i = 0; i < N; i++) {
cout << (Q[i] + 1) << " \n"[i + 1 == N];
}
}
int main() {
ios_base::sync_with_stdio(false), cin.tie(nullptr);
int T;
cin >> T;
while (T--)
solve();
}