Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
35071 | A21μΘ_wjy | 【S】T2 | C++ | 解答错误 | 10 | 576 MS | 3480 KB | 1412 | 2024-11-26 15:59:51 |
#include<bits/stdc++.h> #define int long long using namespace std; const int maxn=1e5+7; int n; int b[maxn]; int a[maxn]; int lst_lb[maxn]; int lst[maxn]; bool Has_nxt[maxn]; queue<int> q; inline void slv(){ cin>>n; for(int i=1;i<=n;i++)cin>>b[i]; int MaxColor=1e9; for(int i=1;i<=n;i++){ if(b[i]<i){cout<<"NO"<<endl;return;} MaxColor=min(MaxColor,b[i]-i+1); } for(int i=1;i<=n;i++)if(b[i-1]>b[i]){cout<<"NO"<<endl;return;} if(b[1]==n+1){cout<<"NO"<<endl;return;} for(int i=1;i<=n;i++)lst[i]=-1,Has_nxt[i]=0; for(int i=1;i<=n;i++){ if(b[i-1]<b[i]){ lst[b[i]]=i-1;Has_nxt[i-1]=1; for(int j=b[i-1];j<=b[i]-1;j++)lst_lb[j]=i; } } while(!q.empty())q.pop(); for(int i=1;i<=n;i++)if(!Has_nxt[i])q.push(i); a[0]=1; int now=1; for(int i=1;i<=n;i++){ if(lst[i]!=-1){a[i]=a[lst[i]];continue;} if(now<MaxColor){a[i]=++now;continue;} while(!q.empty()&&q.front()<lst_lb[i])q.pop(); if(q.empty()||q.front()>=i){cout<<"NO"<<endl;return;} a[i]=a[q.front()];q.pop(); } cout<<"YES"<<endl; for(int i=1;i<=n;i++)cout<<a[i]<<" "; cout<<endl; } signed main(){ #ifndef ONLINE_JUDGE freopen("sing.in","r",stdin); freopen("sing.out","w",stdout); #endif int T; cin>>T; while(T--)slv(); }