Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- void mainSolve()
- {
- int n;
- cin >> n;
- vector<int> B(n + 1, 0);
- for (int i = 1; i <= n; i++)
- cin >> B[i];
- int maxi = -1;
- for (int i = 1; i <= n; i++)
- {
- if (B[i] >= 0)
- {
- if (B[i] == maxi)
- B[i] = -1;
- else
- {
- if (maxi > B[i])
- {
- cout << -1 << '\n';
- return;
- }
- maxi = B[i];
- }
- }
- }
- vector<int> A(n + 1, -1);
- set <int> slots;
- for (int i = 1; i <= n + 10; i++)
- {
- slots.insert(i);
- }
- set <int> elements;
- for (int i = 0; i <= n + 10; i++)
- elements.insert(i);
- for (int i = 1; i <= n; i++)
- {
- if (B[i] >= 0)
- elements.erase(B[i]);
- }
- bool first_time = true;
- maxi = -1;
- for (int i = 1; i <= n; i++)
- {
- if (B[i] == -1)
- continue;
- if (!first_time)
- {
- A[i] = maxi;
- slots.erase(i);
- }
- else
- first_time = false;
- while (true)
- {
- auto it = elements.begin();
- if ((*it) >= B[i])
- break;
- int l = (*slots.begin());
- if (l > i)
- {
- cout << -1 << '\n';
- return;
- }
- A[l] = (*it);
- slots.erase(l);
- elements.erase(it);
- }
- maxi = B[i];
- }
- for (int i = 1; i <= n; i++)
- {
- if (A[i] == -1)
- A[i] = n + 5;
- }
- for (int i = 1; i <= n; i++)
- cout << A[i] << ' ';
- cout << '\n';
- }
- int main()
- {
- int t;
- cin >> t;
- while (t--)
- {
- mainSolve();
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment