| Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|---|
| 41382 | baka24 | 【BJ】T3 | C++ | 内存超限 | 60 | 302 MS | 262256 KB | 1523 | 2026-04-22 18:14:02 |
#include<bits/stdc++.h> #include<bits/extc++.h> using namespace std; using namespace __gnu_pbds; #define pii pair<int,int> #define fr first #define sc second #define mk make_pair #define pb push_back const int MAXN=1000010; int read(){int x=0,f=1;char c=getchar();while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9')x=(x<<1)+(x<<3)+(c^48),c=getchar();return x*f;} int n,m,ans,a[MAXN],h[MAXN],id[MAXN],rk[MAXN],siz[MAXN]; char c[MAXN]; int fa[MAXN]; int fid(int x){return fa[x]==x?x:fa[x]=fid(fa[x]);} void mrge(int x,int y){ x=fid(x),y=fid(y); if(siz[x]>siz[y])swap(x,y); if(x!=y)fa[x]=y,siz[y]+=siz[x]; } vector<int>G[MAXN]; gp_hash_table<int,bool>mp[MAXN]; void slv(){ n=read(); if(n==1){puts("a");return;} for(int i=1;i<=n;i++)rk[a[i]=read()]=i,fa[i]=i,siz[i]=1; for(int i=2;i<=n;i++)h[i]=read(); for(int i=1,k=0;i<=n;i++){ if(k)k--; if(h[rk[i]]==-1)continue; while(k<h[rk[i]])mrge(i+k,a[rk[i]-1]+k),k++; if(i+k<=n&&a[rk[i]-1]+k<=n)G[i+k].pb(a[rk[i]-1]+k); } for(int i=1;i<=n;i++)for(auto j:G[i])mp[fid(i)][fid(j)]=mp[fid(j)][fid(i)]=1; char x='a'; c[a[1]]='a'; for(int i=2;i<=n;i++){ if(rk[a[i]+1]<rk[a[i-1]+1]||mp[fid(a[i])][fid(a[i-1])])x++; c[a[i]]=x; } for(int i=1;i<=n;i++)putchar(c[i]); } signed main(){ // freopen("1.in","r",stdin);freopen("1.out","w",stdout); slv(); // cerr<<clock()*1.0/CLOCKS_PER_SEC<<"s\n"; return 0; }