Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
33597 | 林芳菲 | 【J】T5 小清新桂冠题 | C++ | 通过 | 100 | 145 MS | 136196 KB | 2171 | 2024-10-14 15:51:16 |
#include <cstdio> #include <iostream> #include <algorithm> #include <queue> using namespace std; int t, n; int a[200010]; int b[200010]; int x[200010]; queue<int> q[200010]; int main() { cin >> t; while (t--) { cin >> n; for (int i = 1; i <= n; i++) cin >> b[i]; for (int i = 1; i <= n; i++) x[i] = 0; for (int i = 1; i <= n; i++) while (q[i].size()) q[i].pop(); for (int i = 1; i <= n; i++) q[b[i]].push(i); bool flag = true; for (int i = 1; i <= n; i++) { if (!q[i].size()) continue; if (i == 1) { x[i] = q[i].front(); while (q[i].size()) { int num = q[i].front(); q[i].pop(); a[num] = num; } } else { x[i] = q[i].front(); while (q[i].size() >= i) { int num = q[i].front(); q[i].pop(); int k = num; for (int j = 2; j <= i; j++) { int f = q[i].front(); q[i].pop(); a[k] = f; k = f; if (i == j) a[f] = num; } } if (!q[i].size()) continue; if (!x[i - 1]) { flag = false; break; } while (q[i].size()) { int num = q[i].front(); q[i].pop(); a[num] = x[i - 1]; } } } if (!flag) cout << "No" << endl; else { cout << "Yes" << endl; for (int i = 1; i <= n; i++) cout << a[i] << " "; cout << endl; } } return 0; }