#include #define mp make_pair #define PII pair #define fi first #define se second using namespace std; const int NMAX=200005; int n,m,len,start[NMAX],stop[NMAX],AIB[NMAX]; long long a[NMAX],b[NMAX],sol[NMAX]; vectorv[NMAX]; vector::iterator it; pair ev[NMAX]; void Dfs(int x) { len++; start[x]=len; for (vector::iterator pit=v[x].begin();pit!=v[x].end();pit++) Dfs(*pit); stop[x]=len; } void Update(int poz) { for (int i=poz;i<=n;i+=(i&(-i))) AIB[i]++; } int Query(int poz) { int i,rez=0; for (i=poz;i>=1;i-=(i&(-i))) rez+=AIB[i]; return rez; } int main() { int i,x,sum,aux; #ifndef ONLINE_JUDGE freopen ("date.in","r",stdin); freopen ("date.out","w",stdout); #endif cin>>n; for (i=1;i>x; v[x].push_back(i+1); } for (i=1;i<=n;i++) cin>>a[i],ev[++m]=mp(a[i],mp(1,i)); for (i=1;i<=n;i++) cin>>b[i],ev[++m]=mp(b[i],mp(2,i)); sort(ev+1,ev+m+1); Dfs(1); for (i=1;i<=m;i++)//mergem prin events if (ev[i].se.fi==1)//update Update(start[ev[i].se.se]); else { x=ev[i].se.se;sum=0; for (it=v[x].begin();it!=v[x].end();it++) { aux=Query(stop[*it])-Query(start[*it]-1); sum+=aux; sol[x]-=1LL*aux*aux; } sol[x]+=1LL*sum*sum; if (a[x]<=b[x]) sol[x]+=2*sum+1; } for (i=1;i<=n;i++) cout<