Problem p02698 (C++) — buggy submission, verdict: Runtime Error

#include <bits/stdc++.h>
#define int long long
#define fastio                                                                 \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(NULL);                                                               \\
  cout.tie(NULL);
#define td(v) v.begin(), v.end()
#define tdr(v) v.rbegin(), v.rend()
#define endl "\\n"
#define Matrix vector<vector<int>>
using namespace std;
const int MOD = 1e9 + 7;
const int MOD2 = 1e9 + 9;
const int INF = 5e18;

int gcd(int a, int b) { return (b == 0 ? a : gcd(b, a % b)); }
int lcm(int a, int b) { return (a * b) / gcd(a, b); }

inline long long mod(long long n, long long m) {
  long long ret = n % m;
  if (ret < 0)
    ret += m;
  return ret;
}

int exp(int a, int b) {
  int result = 1;
  while (b > 0) {
    if (b & 1)
      result = result * a;

    b >>= 1;
    a = a * a;
  }
  return result;
}
vector<int> adj[234567];
vector<int> val(234567);
vector<bool> flag(234567, false);
vector<int> vet;
vector<int> res;
void dfs(int pos) {
  flag[pos] = true;
  int x = val[pos];
  int guard;
  bool incrementou = false;
  auto it = lower_bound(td(vet), x);
  int posicao = it - vet.begin();
  if (it == vet.end()) {
    incrementou = true;
    vet.push_back(x);
  } else {
    guard = vet[posicao];
    vet[posicao] = x;
  }
  res[pos] = vet.size();
  for (int i = 0; i < adj[pos].size(); i++) {
    if (!flag[adj[pos][i]])
      dfs(adj[pos][i]);
  }
  if (incrementou) {
    vet.pop_back();
  } else {
    vet[posicao] = guard;
  }
}
void solve() {
  int n;
  cin >> n;
  res.assign(n + 1, 0);
  for (int i = 1; i <= n; i++) {
    cin >> val[i];
  }
  for (int i = 0; i < n - 1; i++) {
    int x, y;
    cin >> x >> y;
    adj[x].push_back(y);
    adj[y].push_back(x);
  }
  dfs(1);
  for (int i = 1; i <= n; i++) {
    cout << res[i] << endl;
  }
}
signed main() {
  fastio;
  // int x=0;
  int t = 1;
  // cin>>t;
  while (t--)
    solve();
}

Error: 0

Fixed submission:

#include <bits/stdc++.h>
#define int long long
#define fastio                                                                 \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(NULL);                                                               \\
  cout.tie(NULL);
#define td(v) v.begin(), v.end()
#define tdr(v) v.rbegin(), v.rend()
#define endl "\\n"
#define Matrix vector<vector<int>>
using namespace std;
const int MOD = 1e9 + 7;
const int MOD2 = 1e9 + 9;
const int INF = 5e18;

int gcd(int a, int b) { return (b == 0 ? a : gcd(b, a % b)); }
int lcm(int a, int b) { return (a * b) / gcd(a, b); }

inline long long mod(long long n, long long m) {
  long long ret = n % m;
  if (ret < 0)
    ret += m;
  return ret;
}

int exp(int a, int b) {
  int result = 1;
  while (b > 0) {
    if (b & 1)
      result = result * a;

    b >>= 1;
    a = a * a;
  }
  return result;
}
vector<int> adj[234567];
vector<int> val(234567);
vector<bool> flag(234567, false);
vector<int> vet;
vector<int> res;
void dfs(int pos) {
  flag[pos] = true;
  int x = val[pos];
  int guard;
  bool incrementou = false;
  auto it = lower_bound(td(vet), x);
  if (it == vet.end()) {
    incrementou = true;
    vet.push_back(x);
  } else {
    guard = *it;
    *it = x;
  }
  res[pos] = vet.size();
  for (int i = 0; i < adj[pos].size(); i++) {
    if (!flag[adj[pos][i]])
      dfs(adj[pos][i]);
  }
  if (incrementou) {
    vet.pop_back();
  } else {
    *it = guard;
  }
}
void solve() {
  int n;
  cin >> n;
  res.assign(n + 1, 0);
  for (int i = 1; i <= n; i++) {
    cin >> val[i];
  }
  for (int i = 0; i < n - 1; i++) {
    int x, y;
    cin >> x >> y;
    adj[x].push_back(y);
    adj[y].push_back(x);
  }
  dfs(1);
  for (int i = 1; i <= n; i++) {
    cout << res[i] << endl;
  }
}
signed main() {
  fastio;
  // int x=0;
  int t = 1;
  // cin>>t;
  while (t--)
    solve();
}