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

const int M = 2e5 + 100;
vector<int> e[M];
int a[M], ans[M];
set<int> st;

void dfs(int u, int pre) {
	auto it = st.lower_bound(a[u]);
	int era = -1;
	if (it != st.end()) {
		era = *it;
		st.erase(it);
	}
	st.insert(a[u]);
	ans[u] = st.size();
	for (auto v : e[u]) {
		if (v != pre) {
			dfs(v, u);
		}
	}
	st.erase(a[u]);
	if (era != -1) st.insert(era);
}

int main() {
	int n; cin >> n;
	for (int i = 0; i < n; i++) cin >> a[i];
	for (int i = 0; i < n - 1; i++) {
		int u, v; cin >> u >> v;
		--u, --v;
		e[u].push_back(v);
		e[v].push_back(u);
	}
	dfs(0, -1);
	for (int i = 0; i < n; i++) cout << ans[i] << "\n";
}