RT,思路是不断放 n,遇到 n 便特判,有没有佬说明一下做法或者给出 hack。
//bkk
#include <bits/stdc++.h>
#define int long long
#define LL long long
#define I ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
#define mem(a, v) memset(a, v, sizeof a)
#define re read()
const int N = 2e6 + 7, M = 16;
using namespace std;
inline LL read()
{
int num = 0;char c;bool flag = false;
while((c = getchar()) == ' ' || c == '\n' || c == '\r');
if(c == '-') flag = true;else num = c - '0';
while(isdigit(c = getchar())) num = num * 10 + c - '0';
return (flag ? -1 : 1) * num;
}
const int mod = 998244353, inf = 0x3f3f3f3f3f3fll;
int t;
int n;
int p[N];
signed main()
{
I;
t = re;
while (t -- )
{
n = re;
for (int i = 1; i <= n; i ++ ) p[i] = re;
if (n <= 2)
{
cout << "-1" << '\n';
continue;
}
for (int i = 1; i <= n; i ++ )
{
if (p[i] == n)
{
if (i >= 2 && p[i - 1] == n - 1 && p[i + 1] == n - 2 || p[i - 1] == n - 2 && p[i + 1] == n - 1) cout << "1" << ' ';
else if (p[i - 1] == n - 1)
{
cout << n - 2 << ' ';
}
else if (p[i + 1] == n - 1)
{
cout << n - 2 << ' ';
}
else cout << n - 1 << ' ';
}
else cout << n << ' ';
}
cout << '\n';
}
}