Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
41374 LYLAKIOI 【BJ】T3 C++ 解答错误 35 636 MS 273508 KB 3039 2026-04-22 15:25:03

Tests(15/19):


#include<bits/stdc++.h> #define up(i,l,r) for(int i=(l);i<=(r);++i) #define down(i,l,r) for(int i=(l);i>=(r);--i) #define pi pair<int,int> #define p1 first #define p2 second #define m_p make_pair #define pb push_back #define eb emplace_back using namespace std; typedef long long ll; inline ll read(){ ll x=0;short t=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')t=-1;ch=getchar();} while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*t; } const int maxn=1e6+10; int n,rk[maxn],sa[maxn],hei[maxn],fa[maxn]; vector<pi>v[maxn]; vector<int>v2[maxn]; int dfn[maxn],low[maxn],bel[maxn],cnt,scc,stk[maxn],top,deg[maxn]; void dfs(int u){ dfn[u]=low[u]=++cnt,stk[++top]=u; for(int x:v2[u]) if(!dfn[x])dfs(x),low[u]=min(low[u],low[x]); else if(!bel[x])low[u]=min(low[u],dfn[x]); if(dfn[u]==low[u]){ ++scc; while(top){ int p=stk[top--]; bel[p]=scc;if(p==u)break; } } } int res[maxn]; int F[maxn]; inline int fd(int u){if(F[u]==u)return u;return F[u]=fd(F[u]);} struct sol{ int fa[20][maxn]; inline int fd(int a,int u){if(fa[a][u]==u)return u;return fa[a][u]=fd(a,fa[a][u]);} void mer(int l,int r,int p,int q){ if(l>r)return; int k=__lg(r-l+1); auto upd=[&](int l,int p){fa[k][l]=fd(k,p);}; upd(l,p),upd(r-(1<<k)+1,q-(1<<k)+1); } vector<int>ve[maxn]; int ans[maxn]; void slv(){ up(i,0,19)up(j,1,n-(1<<i)+1)fa[i][j]=j; up(i,1,n-1)if(~hei[i])mer(sa[i],sa[i]+hei[i]-1,sa[i+1],sa[i+1]+hei[i]-1); down(i,19,1){ up(j,1,n-(1<<i)+1)ve[j].clear(); up(j,1,n-(1<<i)+1)ve[fd(i,j)].eb(j); up(j,1,n-(1<<i)+1)if(ve[j].size()>1)up(k,1,ve[j].size()-1){ int x=ve[j][0],y=ve[j][k]; fa[i-1][fd(i-1,y)]=fd(i-1,x); fa[i-1][fd(i-1,y+(1<<i-1))]=fd(i-1,x+(1<<i-1)); } } } }t; vector<int>ve[maxn]; void slv(){ n=read(); up(i,1,n)rk[sa[i]=read()]=i; up(i,1,n-1)hei[i]=read(); vector<tuple<int,int,int> >E; auto link=[&](int x,int y){E.eb(x,y,0),v2[x].eb(y);}; up(i,1,n-1){ if((!hei[i])||rk[sa[i]+1]>rk[sa[i+1]+1]){E.eb(sa[i],sa[i+1],1);continue;} if(hei[i]==-1)link(sa[i],sa[i+1]); } t.slv(); up(i,1,n)ve[t.fd(0,i)].eb(i); up(i,1,n)if(ve[i].size()>1)up(j,1,(int)ve[i].size()-1) link(ve[i][0],ve[i][j]),link(ve[i][j],ve[i][0]); up(i,1,n)if(!dfn[i])dfs(i); for(auto [x,y,w]:E)if(bel[x]!=bel[y])v[bel[x]].eb(bel[y],w),++deg[bel[y]]; queue<int>q;up(i,1,scc)if(!deg[i])q.push(i); while(!q.empty()){ int u=q.front();q.pop(); for(auto [x,w]:v[u]){ res[x]=max(res[x],res[u]+w); if(!(--deg[x]))q.push(x); } } up(i,1,n)putchar(res[bel[i]]+'a'); } int main(){ // freopen("hush.in","r",stdin),freopen("hush.out","w",stdout); slv(); return 0; }


测评信息: