提交时间:2024-10-16 18:23:37
运行 ID: 33633
#include<bits/stdc++.h> using namespace std; long long T,n,b[200005],a[200005],y[200005]; queue<long long>poi[200005]; int main(){ scanf("%lld",&T); while(T--){ scanf("%lld",&n); for(int i=1;i<=n;i++){ y[i]=0; } for(int i=1;i<=n;i++)while(!poi[i].empty())poi[i].pop(); for(int i=1;i<=n;i++){ scanf("%lld",&b[i]); poi[b[i]].push(i); } long long flag=1; for(int i=1;i<=n;i++){ if(poi[i].empty())continue; if(i==1){ y[1]=poi[1].front(); while(!poi[i].empty()){ a[poi[i].front()]=poi[i].front(); poi[i].pop(); } continue; } y[i]=poi[i].front(); while(poi[i].size()>=i){ long long ft=poi[i].front(),lt=poi[i].front(); poi[i].pop(); for(int j=2;j<=i;j++){ a[lt]=poi[i].front(); lt=poi[i].front(); if(j==i){ a[poi[i].front()]=ft; } poi[i].pop(); } } if(poi[i].empty())continue; if(y[i-1]==0){ printf("No\n"); flag=0; break; } else{ while(!poi[i].empty()){ a[poi[i].front()]=y[i-1]; poi[i].pop(); } } } if(flag==1){ printf("Yes\n"); for(int i=1;i<=n;i++){ printf("%lld ",a[i]); } printf("\n"); } } return 0; }