Language: C++

#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
#include <stack>
#include <vector>

using namespace std; using ll=long long; const int INF=1e9;
typedef pair<int,int> P;
const int mx = 200000;

vector<int> v[mx]; int an[mx], a[mx]; int n; int pp[mx];

int dfs(int from, int now, int pc) {
  //cout<<from<<" "<<now<<" "<<pc<<" ";
  auto it = lower_bound(pp, pp+mx, a[now]);
  int pc2 = max(pc, it-pp);
  //cout<<pc2<<" ";
  int bf = *it;
  //cout<<bf<<endl;
  *it = a[now];
  an[now] = pc2;
  
  for(int x:v[now]) {
    if (x == from) continue;
    dfs(now, x, pc2);
  }

  *it = bf;
}

int main() {
  cin>>n;
  for(int i=0;i<n;i++) cin>>a[i];

  for(int i=0;i<n-1;i++) {
    int s,b; cin>>s>>b; s--; b--;
    v[s].push_back(b); v[b].push_back(s);
  }

  fill(pp, pp+mx, INF);

  dfs(-1, 0, 0);

  for(int i=0;i<n;i++) {
    cout<<an[i]+1<<endl;
  } 
}

Compiler output:
a.cc: In function 'int dfs(int, int, int)':
a.cc:17:16: error: no matching function for call to 'max(int&, long int)'
   17 |   int pc2 = max(pc, it-pp);
      |             ~~~^~~~~~~~~~~
In file included from /usr/include/c++/14/string:51,
                 from /usr/include/c++/14/bits/locale_classes.h:40,
                 from /usr/include/c++/14/bits/ios_base.h:41,
                 from /usr/include/c++/14/ios:44,
                 from /usr/include/c++/14/ostream:40,
                 from /usr/include/c++/14/iostream:41,
                 from a.cc:1:
/usr/include/c++/14/bits/stl_algobase.h:257:5: note: candidate: 'template<class _Tp> constexpr const _Tp& std::max(const _Tp&, const _Tp&)'
  257 |     max(const _Tp& __a, const _Tp& __b)
      |     ^~~
/usr/include/c++/14/bits/stl_algobase.h:257:5: note:   template argument deduction/substitution failed:
a.cc:17:16: note:   deduced conflicting types for parameter 'const _Tp' ('int' and 'long int')
   17 |   int pc2 = max(pc, it-pp);
      |             ~~~^~~~~~~~~~~
/usr/include/c++/14/bits/stl_algobase.h:303:5: note: candidate: 'template<class _Tp, class _Compare> constexpr const _Tp& std::max(const _Tp&, const _Tp&, _Compare)'
  303 |     max(const _Tp& __a, const _Tp& __b, _Compare __comp)
      |     ^~~
/usr/include/c++/14/bits/stl_algobase.h:303:5: note:   candidate expects 3 arguments, 2 provided
In file included from /usr/include/c++/14/algorithm:61,
                 from a.cc:3:
/usr/include/c++/14/bits/stl_algo.h:5706:5: note: candidate: 'template<class _Tp> constexpr _Tp std::max(initializer_list<_Tp>)'
 5706 |     max(initializer_list<_Tp> __l)
      |     ^~~
/usr/include/c++/14/bits/stl_algo.h:5706:5: note:   candidate expects 1 argument, 2 provided
/usr/include/c++/14/bits/stl_algo.h:5716:5: note: candidate: 'template<class _Tp, class _Compare> constexpr _Tp std::max(initializer_list<_Tp>, _Compare)'
 5716 |     max(initializer_list<_Tp> __l, _Compare __comp)
      |     ^~~
/usr/include/c++/14/bits/stl_algo.h:5716:5: note:   template argument deduction/substitution failed:
a.cc:17:16: note:   mismatched types 'std::initializer_list<_Tp>' and 'int'
   17 |   int pc2 = max(pc, it-pp);
      |             ~~~^~~~~~~~~~~
a.cc:30:1: warning: no return statement in function returning non-void [-Wreturn-type]
   30 | }
      | ^