#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector<ll> vec;
typedef vector<vec> mat;
typedef pair<ll,ll> pll;
const ll mod=1e9+7;
//const ll mod=998244353;
const ll inf=5e18;

ll n;
vec a(2<<17);
mat G(2<<17);
vec dp(2<<17);
vec ans(2<<17);

void dfs(ll u,ll p,ll R) {
  ll l=0,r=R;
  while(r-l>1) {
    ll m=l+r>>1;
    if(dp[m]<a[u])l=m;
    else r=m;
  }
  ll pre=dp[r];
  dp[r]=a[u];
  ans[u]=R==r?R++:R-1;
  for(ll v:G[u]) if(v!=p) dfs(v,u,R);
  dp[r]=pre;
}

int main() {
  cin >> n;
  for(ll i=0;i<n;i++) cin >> a[i];
  vec u(n-1),v(n-1);
  for(ll i=1;i<n;i++) {
    ll u,v;
    cin >> u >> v;
    u--,v--;
    G[u].push_back(v);
    G[v].push_back(u);
  }
  for(ll i=1;i<=n;i++) dp[i]=2e9;
  dfs(0,-1,1);
  for(ll i=0;i<n;i++) cout << ans[i] << endl;
}