func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 6010;   int ans, f[maxn], r[maxn], m[maxn][maxn];   void dfs(int x, int y, int p) {     int k = lower_bound(f, f + p, r[x]) - f;     int t = f[k];     f[k] = r[x];     ans = max(ans, k);     p = max(k + 1, p);     for (int i = 1; i <= m[x][0]; i++)       if (m[x][i] != y) dfs(m[x][i], x, p);     f[k] = t;   }   int main() {     int n;     scanf( %d , &n);     for (int i = 1; i <= n; i++) scanf( %d , r + i);     for (int i = 1; i < n; i++) {       int a, b;       scanf( %d%d , &a, &b);       m[a][++m[a][0]] = b;       m[b][++m[b][0]] = a;     }     for (int i = 1; i <= n; i++) dfs(i, 0, 1);     printf( %d n , ans);     return 0;   }   