#include <bits/stdc++.h>
using namespace std;

using ll = long long;
#define rep(i,n) for(int i = 0; i < (n); i++)
#define rrep(i,n) for(int i = (n); i > 0; i--)
#define all(n) n.begin(), n.end()
#define print(n) cout << n << endl

ll n;
vector<ll> a(200000),dp(200000,1<<30),ans(200000);
vector<set<ll>> e(200000);

int dfs(ll v,ll prev){
    ll pos = lower_bound(all(dp),a[v])-dp.begin();
    ll temp = dp[pos];
    dp[pos] = a[v];
    ans[v]=(lower_bound(all(dp),1<<30)-dp.begin());
    
    for(ll i:e[v]) if(i!=prev) dfs(i,v);
    dp[pos] = temp;
    return 0;
}

int main(){
    cin.tie(0);
    ios_base::sync_with_stdio(false);
    
    ll u,v;

    cin >> n;
    rep(i,n) cin >> a[i];
    rep(i,n-1){
        cin >> u >> v;
        e[u-1].insert(v-1);
        e[v-1].insert(u-1);
    }
    dfs(0,0);

    rep(i,n) print(ans[i]);
    return 0;
}