Language: C++

#include <bits/stdc++.h>
//#include <boost/multiprecision/cpp_int.hpp>
//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>
#pragma GCC optimize("O3")
#define REP(i,n) for(int i=0;i<n;i++)
#define REPP(i,n) for(int i=1;i<=n;i++)
#define ALL(obj) (obj).begin(), (obj).end()
#define EPS (1e-9)
#define INF (1e17)
#define PI (acos(-1))
//const double PI = acos(-1);
//const double EPS = 1e-15;
//long long INF=(long long)1E17;
#define i_7 (long long)(1e9+7)
//#define i_7 998'244'353
long mod(long a){
    long long c=a%i_7;
    if(c>=0)return c;
    return c+i_7;
}
long long po(long a, long b){
    if(b==0){
        return 1;
    }
    
    long long z = po(a,b/2);
    z = mod(z*z);
    if(b%2!=0){
        z = mod(a*z);
    }
    return z;
}
 
bool prime_(int n){
  if(n==1){
    return false;
  }else if(n==2){
    return true;
  }else{
    for(int i=2;i<=std::sqrt(n);i++){
      if(n%i==0){
        return false;
      }
    }
    return true;
  }
}
 
long long gcd_(long long a, long long b){
  if(a<b){
    std::swap(a,b);
  }
  if(a%b==0){
    return b;
  }else{
    return gcd_(b,a%b);
  }
}
 
long long lcm_(long long x, long long y){
  return (x/gcd_(x,y))*y;
}
 
using namespace std;
//using namespace boost::multiprecision;
//using namespace __gnu_pbds;

const int MAX_N = 200'050;

vector<int> G[MAX_N];
long long dp[MAX_N]; //長さiの増加部分列の末尾として取りうる最小値をdp[i]として持つ
long long ans[MAX_N];

void dfs(int v, vector<int>& a, int p = -1){
  int index = lower_bound(ALL(dp), a[v]) - dp;
  long long old_val = dp[index];
  ans[v] = lower_bound(ALL(dp), INF) - dp - 1;
  for(int nv: G[v]){
    if(nv == p) continue;
    dfs(nv, a, v);
  }
  dp[index] = old_val;
  return;
}

int main(){
  //using namespace std;
  int n;
  cin>>n;
  vector<long long> a(n);
  REP(i, n) cin>>a[i];
  int u[n - 1], v[n - 1];
  REP(i, n - 1){
    cin>>u[i]>>v[i];
    u[i]--; v[i]--;
  }
  
  REP(i, n - 1){
    G[u[i]].push_back(v[i]);
    G[v[i]].push_back(u[i]);
  }
  REP(i, MAX_N) dp[i] = INF;
  dp[0] = -INF;
  
  dfs(0, a);
  
  REP(i, n) cout << ans[i] << endl;
  return 0;
}


Compiler output:
a.cc: In function 'void dfs(int, std::vector<int>&, int)':
a.cc:8:24: error: request for member 'begin' in 'dp', which is of non-class type 'long long int [200050]'
    8 | #define ALL(obj) (obj).begin(), (obj).end()
      |                        ^~~~~
a.cc:76:27: note: in expansion of macro 'ALL'
   76 |   int index = lower_bound(ALL(dp), a[v]) - dp;
      |                           ^~~
a.cc:8:39: error: request for member 'end' in 'dp', which is of non-class type 'long long int [200050]'
    8 | #define ALL(obj) (obj).begin(), (obj).end()
      |                                       ^~~
a.cc:76:27: note: in expansion of macro 'ALL'
   76 |   int index = lower_bound(ALL(dp), a[v]) - dp;
      |                           ^~~
a.cc:8:24: error: request for member 'begin' in 'dp', which is of non-class type 'long long int [200050]'
    8 | #define ALL(obj) (obj).begin(), (obj).end()
      |                        ^~~~~
a.cc:78:24: note: in expansion of macro 'ALL'
   78 |   ans[v] = lower_bound(ALL(dp), INF) - dp - 1;
      |                        ^~~
a.cc:8:39: error: request for member 'end' in 'dp', which is of non-class type 'long long int [200050]'
    8 | #define ALL(obj) (obj).begin(), (obj).end()
      |                                       ^~~
a.cc:78:24: note: in expansion of macro 'ALL'
   78 |   ans[v] = lower_bound(ALL(dp), INF) - dp - 1;
      |                        ^~~
a.cc: In function 'int main()':
a.cc:106:10: error: invalid initialization of reference of type 'std::vector<int>&' from expression of type 'std::vector<long long int>'
  106 |   dfs(0, a);
      |          ^
a.cc:75:30: note: in passing argument 2 of 'void dfs(int, std::vector<int>&, int)'
   75 | void dfs(int v, vector<int>& a, int p = -1){
      |                 ~~~~~~~~~~~~~^