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

#include <bits/stdc++.h>

using namespace std;

#define int long long

#define PB push_back
#define ALL(x) (x).begin(), (x).end()
#define ALLR(x) (x).rbegin(), (x).rend()
#define MP make_pair

#define debug(args...)                                                         \\
  {                                                                            \\
    string _s = #args;                                                         \\
    replace(ALL(_s), ',', ' ');                                                \\
    stringstream ss(_s);                                                       \\
    cerr << endl;                                                              \\
    _debug(ss, args);                                                          \\
  }
#define _rg                                                                    \\
  auto it = next(v.begin());                                                   \\
  it != v.end();                                                               \\
  it++
#define _input ostream& operator <<(ostream& out

template<typename T, typename U>
_input, const pair<T, U>& p) {
  out << "(" << p.first << ", " << p.second << ")";
  return out;
}

#define cont(c) template<typename T> _input, const c<T>& v) {                  \\
    if (v.empty())                                                             \\
      return out;                                                              \\
    out << "[" << *v.begin();                                                  \\
    for (_rg)                                                                  \\
      out << ", " << *it;                                                      \\
    out << "]";                                                                \\
    return out;                                                                \\
  }

#define cont2(c) template<typename T, typename U> _input, const c<T, U>& v) {  \\
    if (v.empty())                                                             \\
      return out;                                                              \\
    out << "[" << *v.begin();                                                  \\
    for (_rg)                                                                  \\
      out << ", " << *it;                                                      \\
    out << "]";                                                                \\
    return out;                                                                \\
  }

cont(vector) cont(set) cont(multiset) cont(queue) cont2(map)
 
template<typename T, size_t n, typename= enable_if_t<!is_same<T, char>::value>>
_input, const T(&v)[n]) {
  if (n == 0)
    return out;
  out << "[" << v[0];
  for (int i = 1; i < (int)n; i++)
    out << ", " << v[i];
  out << "]";
  return out;
}

template <typename T, typename... Ts>
void _debug(stringstream &ss, const T &arg) {
  string name;
  ss >> name;
  cerr << name << " = " << arg << endl;
}

template <typename T, typename... Ts>
void _debug(stringstream &ss, const T &arg, const Ts &...args) {
  string name;
  ss >> name;
  cerr << name << " = " << arg << ", ";
  if (is_class<T>::value || is_array<T>::value)
    cerr << endl;
  _debug(ss, args...);
}

#define FAST_IO                                                                \\
  ios::sync_with_stdio(false);                                                 \\
  cin.tie(0)

typedef pair<int, int> ii;
typedef pair<pair<int, int>, int> iii;
typedef vector<int> vi;
typedef vector<iii> viii;
typedef vector<vi> vvi;
typedef vector<ii> vii;
typedef vector<string> vs;
typedef vector<bool> vb;
typedef unsigned long long ull;

const int INF = LONG_LONG_MAX / 2;
const int NINF = LONG_LONG_MIN / 2;
const double PI = 3.141592653589793238;

const int N = 100000;
const int K = 9;

int32_t main() {
  FAST_IO;

  int n;
  cin >> n;

  vi V(n + 1), W(n + 1);
  for (int i = 1; i <= n; i++) {
    cin >> V[i] >> W[i];
  }

  vvi dp((1ll << K), vi(N + 1));
  vi depth(n + 1);
  for (int i = 1; i <= n; i++) {
    if (2 * i > n)
      break;
    depth[2 * i] = depth[i] + 1;
    if (2 * i + 1 > n)
      break;
    depth[2 * i + 1] = depth[i] + 1;
  }

  for (int i = 1; i <= n; i++) {
    if (depth[i] >= K)
      break;
    for (int j = 1; j <= N; j++) {
      dp[i][j] = max(dp[i][j - 1], dp[i / 2][j]);
      if (j - W[i] < 0)
        continue;
      dp[i][j] = max(dp[i][j], dp[i / 2][j - W[i]] + V[i]);
    }
  }
  //~ for (vi& v: dp) {
  //~ debug(v);
  //~ }
  int q;
  cin >> q;
  while (q-- > 0) {
    int v, L;
    cin >> v >> L;

    if (depth[v] < K) {
      cout << dp[v][L] << endl;
    } else {
      vi path;
      int p = v;
      while (depth[p] >= K) {
        path.PB(p);
        p /= 2;
      }
      int sz = path.size();
      int ans = 0;
      for (int mask = 0; mask < (1ll << sz); mask++) {
        int weight_sum = 0, value_sum = 0;
        for (int i = 0; i < sz; i++) {
          if (mask & (1ll << i)) {
            weight_sum += W[path[i]];
            value_sum += V[path[i]];
          }
        }
        if (weight_sum > L)
          continue;
        ans = max(ans, dp[path.back() / 2][L - weight_sum] + value_sum);
      }
      cout << ans << endl;
    }
  }
}
// g++ -Wall -Wextra -Wshadow -fsanitize=undefined -std=c++17


Error: 0

Fixed submission:

#include <bits/stdc++.h>

using namespace std;

#define int long long

#define PB push_back
#define ALL(x) (x).begin(), (x).end()
#define ALLR(x) (x).rbegin(), (x).rend()
#define MP make_pair

#define debug(args...)                                                         \\
  {                                                                            \\
    string _s = #args;                                                         \\
    replace(ALL(_s), ',', ' ');                                                \\
    stringstream ss(_s);                                                       \\
    cerr << endl;                                                              \\
    _debug(ss, args);                                                          \\
  }
#define _rg                                                                    \\
  auto it = next(v.begin());                                                   \\
  it != v.end();                                                               \\
  it++
#define _input ostream& operator <<(ostream& out

template<typename T, typename U>
_input, const pair<T, U>& p) {
  out << "(" << p.first << ", " << p.second << ")";
  return out;
}

#define cont(c) template<typename T> _input, const c<T>& v) {                  \\
    if (v.empty())                                                             \\
      return out;                                                              \\
    out << "[" << *v.begin();                                                  \\
    for (_rg)                                                                  \\
      out << ", " << *it;                                                      \\
    out << "]";                                                                \\
    return out;                                                                \\
  }

#define cont2(c) template<typename T, typename U> _input, const c<T, U>& v) {  \\
    if (v.empty())                                                             \\
      return out;                                                              \\
    out << "[" << *v.begin();                                                  \\
    for (_rg)                                                                  \\
      out << ", " << *it;                                                      \\
    out << "]";                                                                \\
    return out;                                                                \\
  }

cont(vector) cont(set) cont(multiset) cont(queue) cont2(map)

template<typename T, size_t n, typename= enable_if_t<!is_same<T, char>::value>>
_input, const T(&v)[n]) {
  if (n == 0)
    return out;
  out << "[" << v[0];
  for (int i = 1; i < (int)n; i++)
    out << ", " << v[i];
  out << "]";
  return out;
}

template <typename T, typename... Ts>
void _debug(stringstream &ss, const T &arg) {
  string name;
  ss >> name;
  cerr << name << " = " << arg << endl;
}

template <typename T, typename... Ts>
void _debug(stringstream &ss, const T &arg, const Ts &...args) {
  string name;
  ss >> name;
  cerr << name << " = " << arg << ", ";
  if (is_class<T>::value || is_array<T>::value)
    cerr << endl;
  _debug(ss, args...);
}

#define FAST_IO                                                                \\
  ios::sync_with_stdio(false);                                                 \\
  cin.tie(0)

typedef pair<int, int> ii;
typedef pair<pair<int, int>, int> iii;
typedef vector<int> vi;
typedef vector<iii> viii;
typedef vector<vi> vvi;
typedef vector<ii> vii;
typedef vector<string> vs;
typedef vector<bool> vb;
typedef unsigned long long ull;

const int INF = LONG_LONG_MAX / 2;
const int NINF = LONG_LONG_MIN / 2;
const double PI = 3.141592653589793238;

const int N = 100000;

int32_t main() {
  FAST_IO;

  int n;
  cin >> n;

  vi V(n + 1), W(n + 1);
  for (int i = 1; i <= n; i++) {
    cin >> V[i] >> W[i];
  }

  vvi dp(n + 1, vi(N + 1));

  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= N; j++) {
      dp[i][j] = max(dp[i][j - 1], dp[i / 2][j]);
      if (j - W[i] < 0)
        continue;
      dp[i][j] = max(dp[i][j], dp[i / 2][j - W[i]] + V[i]);
    }
  }
  //~ for (vi& v: dp) {
  //~ debug(v);
  //~ }
  int q;
  cin >> q;
  while (q-- > 0) {
    int v, L;
    cin >> v >> L;

    cout << dp[v][L] << endl;
  }
}
// g++ -Wall -Wextra -Wshadow -fsanitize=undefined -std=c++17