1 solutions

  • -1
    @ 2026-3-1 14:08:32
    #include<bits/stdc++.h>
    const int M=2e5+5;
    int n,m,dfc,d[M],f[M],dfn[M],siz[M],son[M],top[M];
    int BIT[M];int opt[M],x[M],y[M],ans[M];
    std::vector<int>G[M],id[M];
    void DFS1(int u){
    	dfn[u]=++dfc;d[u]=d[f[u]]+1;siz[u]=1;
    	for(int&v:G[u]){
    		DFS1(v);siz[u]+=siz[v];
    		if(siz[v]>siz[son[u]])son[u]=v;
    	}
    }
    void DFS2(int u,int tp){
    	top[u]=tp;if(!son[u])return;DFS2(son[u],tp);
    	for(int&v:G[u])if(v!=son[u])DFS2(v,v);
    }
    inline int LCA(int u,int v){
    	while(top[u]^top[v]){
    		if(d[top[u]]>d[top[v]])u=f[top[u]];
    		else v=f[top[v]];
    	}
    	return d[u]>d[v]?v:u;
    }
    inline int dis(const int&u,const int&v){
    	return d[u]+d[v]-(d[LCA(u,v)]<<1)+1;
    }
    inline void Add(int x,const int&val){
    	for(;x<=n;x+=1<<__builtin_ctz(x))BIT[x]+=val;
    }
    inline int Query(int x){
    	int ans=0;
    	for(;x>=1;x-=1<<__builtin_ctz(x))ans+=BIT[x];
    	return ans;
    }
    inline int Q(const int&x,const int&y){
    	int lca=LCA(x,y);
    	return Query(dfn[x])+Query(dfn[y])-Query(dfn[lca])-Query(dfn[f[lca]]);
    }
    signed main(){
    	register int i,k;
    	scanf("%d",&n);
    	for(i=1;i<=n;++i)scanf("%d",f+i),G[f[i]].push_back(i);
    	for(i=1;f[i];i=f[i]);
    	DFS1(i);DFS2(i,i);
    	scanf("%d",&m);
    	for(i=1;i<=m;++i){
    		scanf("%d",opt+i);
    		if(opt[i]==1){
    			scanf("%d%d%d",x+i,y+i,&k);
    			if(k<i)id[i-k-1].push_back(i);
    		}
    		if(opt[i]==2){
    			scanf("%d",x+i);
    		}
    	}
    	for(i=1;i<=m;++i){
    		if(opt[i]==2){
    			Add(dfn[x[i]],1);Add(dfn[x[i]]+siz[x[i]],-1);
    		}
    		for(int&v:id[i])ans[v]=Q(x[v],y[v]);
    		if(opt[i]==1){
    			printf("%d %d\n",dis(x[i],y[i]),ans[i]);
    		}
    	}
    }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    • 1

    Information

    ID
    28367
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    7
    Tags
    (None)
    # Submissions
    29
    Accepted
    9
    Uploaded By