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

const int maxn = 2e5+5, inf = 1e9+7;
int n, a[maxn], ans[maxn], lis[maxn];
vector<int> vs[maxn], seq;
vector<pair<int,int>> changes;


void dfs(int v, int p = -1){
	seq.emplace_back(a[v]);
	auto it = lower_bound(lis, lis+maxn, a[v]);
	changes.push_back({int(it-lis), *it});
	*it = min(*it, a[v]);
	ans[v] = lower_bound(lis, lis+maxn, inf)-1-lis;
	for(int e: vs[v]) if (e != p) dfs(e, v);
	seq.pop_back();
	pair<int,int> aux = changes.back();
	changes.pop_back();
	lis[aux.first] = aux.second;
}

int main(){
	scanf("%d", &n);
	fill(lis+1, lis+maxn, inf);
	lis[0] = 0;
	for(int i = 0; i<n; i++) scanf("%d", &a[i]);
	for(int i = 0; i<n-1; i++){
		int x, y;
		scanf("%d %d", &x, &y);
		vs[--x].emplace_back(--y);
		vs[y].emplace_back(x);
	}
	dfs(0);
	for(int i = 0; i<n; i++) printf("%d\n", ans[i]);

	return 0;
}