Codeforces
CF Step
Youtube Linkedin Discord Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

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();
}