#include <bits/stdc++.h>
using namespace std;
int n,p[1000010],b[1000010];
int lowbit(int x){
return x&(-x);
}
struct qxx{
int to,nxt;
}g[1000010];int cnt,head[1000010];
void add(int u,int v){
g[++cnt].to=v;
g[cnt].nxt=head[u];
head[u]=cnt;
}
int c[1000010];
int query(int x){
int sum=0;
while(x) sum+=c[x],x-=lowbit(x);
return sum;
}
int change(int x,int k){
while(x<=n) c[x]+=k,x+=lowbit(x);
}
int ans[1000010];
void dfs(int x){
ans[x]-=query(n)-query(p[x]);
for(int i=head[x];i;i=g[i].nxt) dfs(g[i].to);
ans[x]+=query(n)-query(p[x]);
change(p[x],1);
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>p[i];
b[i]=p[i];
}
sort(b+1,b+1+n);
for(int i=1;i<=n;i++){
p[i]=lower_bound(b+1,b+1+n,p[i])-b;
}
for(int i=2;i<=n;i++){
int x;
cin>>x;
add(x,i);
}
dfs(1);
for(int i=1;i<=n;i++){
cout<<ans[i]<<endl;
}
return 0;
}