#include <bits/stdc++.h>
using namespace std;
typedef long long int LL;
typedef pair<int,int> P;
typedef pair<LL,LL> PL;

const int MOD=1000000007;
const int INF=1001001001;
const LL LINF=100100100100100;

LL n;
LL a[200010];
vector<LL> g[200010];
LL dp[200010];
LL ans[200010];

void dfs(LL v,LL p){
  LL ima=lower_bound(dp,dp+200010,a[v])-dp;
  LL old=dp[ima];
  dp[ima]=a[v];
  ans[v]=lower_bound(dp,dp+200010,LINF)-dp-1;
  for(LL w:g[v]){
    if(w==p)continue;
    dfs(w,v);
  }
  dp[ima]=old;
}
  
int main(){
  cin>>n;
  for(LL i=0;i<n;i++)cin>>a[i];
  for(LL i=0;i<n-1;i++){
    LL u,v;cin>>u>>v;u--;v--;
    g[u].push_back(v);
    g[v].push_back(u);
  }
  for(LL i=0;i<200010;i++)dp[i]=LINF;
  dp[0]=-LINF;
  dfs(0,-1);
  for(LL i=0;i<n;i++)cout<<ans[i]<<endl;
  return 0;
}