提交时间:2024-03-31 13:52:34

运行 ID: 27904

#include<bits/stdc++.h> #define jp8 push_back using namespace std; const int N=1e6+20; struct nd{ int vl,id; }a[N];bool cmp(nd a,nd b){ return a.vl<b.vl; } int unq[N]; bool vis[N]; vector<int> s[N]; int n; int BIT[N]; int lowbit(int x){ return x&(-x); }void upd(int x,int v){ for(int i=x;i<=n;i+=lowbit(i)) BIT[i]+=v; }int qry(int x){ int res=0; for(int i=x;i>0;i-=lowbit(i)) res+=BIT[i]; return res; }int ans[N]; void dfs(int u){ ans[u]++;vis[u]=1; ans[u]+=qry(1e6)-qry(unq[u]-1); upd(unq[u],1); for(auto ed:s[u]){ if(!vis[ed])dfs(ed); }upd(unq[u],-1); } int main(){ cin>>n; for(int i=2;i<=n;i++){ int q;cin>>q; s[q].jp8(i); }for(int i=1;i<=n;i++){ cin>>a[i].vl; a[i].id=i; }sort(a+1,a+n+1,cmp); int cnt=0; for(int i=1;i<=n;i++){ if(a[i].vl!=a[i-1].vl) cnt++; unq[a[i].id]=cnt; }dfs(1); for(int i=1;i<=n;i++) cout<<ans[i]<<' '; }