我不会证,题解也没有。
#include <bits/stdc++.h>
#define pb push_back
using namespace std;
const int N=(int)(1e5+5);
vector<int>vec[N];
int n,a[N],ans[N];
void clr() {
for(int i=0;i<=n;i++) vector<int>().swap(vec[i]);
}
void sol() {
cin>>n;
clr();
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++) vec[a[i]].pb(i);
int res=0;
for(int i=n;i>=1;i--) {
int d1=res+i,d2=res;
if(!vec[d2].empty()) {
int qwq=vec[d2].back();
ans[qwq]=-i;
vec[d2].pop_back();
} else if(!vec[d1].empty()) {
int qwq=vec[d1].back();
ans[qwq]=i;
vec[d1].pop_back();
++res;
} else {
cout<<"NO\n"; return ;
}
}
cout<<"YES\n";
for(int i=1;i<=n;i++) cout<<ans[i]<<' ';
cout<<'\n';
}
signed main() {
cin.tie(0); ios::sync_with_stdio(false);
int T; cin>>T; while(T--) sol();
return 0;
}