Шифровка чисел с++

Всем доброго времени суток! Задача заключается в том чтобы каждое число из перестановки чисел от 1 до n было заменено количеством чисел, больших него и находящихся правее в последовательности. Вводится одно целое число n и n зашифрованных чисел. Нужно вывести искомую последовательность (перестановку). Например, если вводится n=3, то это числа от 1 до 3. Если расшифровать последовательность нельзя, вывести «Impossible». Пример:

ввод:
    3
    2 1 0
вывод:
    1 2 3 (2=1, тк 2 числа больше единицы, 1=2, тк 1 число больше двойки, 0=3, тк нет чисел в последовательности до 3х больших тройки)

Я не знаю в чем моя ошибка, помогите пожалуйста разобраться

#include <iostream>
#include <vector>

int main() {
    int n;
    std::cin >> n;
    std::vector<int> encrypted(n);
    for (int i = 0; i < n; ++i) {
        std::cin >> encrypted[i];
    }

    std::vector<int> decrypted(n, -1);
    for (int i = 0; i < n; ++i) {
        int count = 0;
        for (int j = 0; j < n; ++j) {
            if (decrypted[j] == -1 && count == encrypted[i]) {
                decrypted[j] = i + 1;
                break;
            }
            if (decrypted[j] == -1) {
                count++;
            }
        }
    }

    bool impossible = false;
    for (int i = 0; i < n; ++i) {
        if (decrypted[i] == -1) {
            impossible = true;
            break;
        }
    }

    if (impossible) {
        std::cout << "Impossible" << std::endl;
    } else {
        for (int i = 0; i < n; ++i) {
            std::cout << decrypted[i] << " ";
        }
    }

    return 0;
}

Ответы (1 шт):

Автор решения: Harry

Ну, я бы делал как-то так:

#include <deque>
#include <iostream>

using namespace std;


int main(int argc, char * argv[])
{
    int n;
    cin >> n;
    deque<int> r, d;
    bool imps = false;
    for (int i = 0; i < n; ++i) d.push_back(i+1);
    for (int j, i = 0; i < n; ++i)
    {
        cin >> j;
        j = n-i-1-j;
        if (j >= d.size()) { imps = true; break; }
        r.push_back(d[j]);
        d.erase(d.begin()+j);
    }
    if (imps) cout << "Impossible";
    else for(int i: r) cout << i << " ";
    cout << endl;
}
→ Ссылка