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

#include <algorithm>
#include <bitset>
#include <ciso646>
#include <cmath>
#include <complex>
#include <cstdio>
#include <functional>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <random>
#include <set>
#include <stack>
#include <string>
#include <tuple>
#include <unordered_map>
#include <utility>
#include <vector>
using namespace std;
typedef long long ll;
typedef unsigned int ui;
const ll mod = 1000000007;
const ll INF = (ll)1000000007 * 1000000007;
typedef pair<int, int> P;
#define stop                                                                   \\
  char nyaa;                                                                   \\
  cin >> nyaa;
#define rep(i, n) for (int i = 0; i < n; i++)
#define per(i, n) for (int i = n - 1; i >= 0; i--)
#define Rep(i, sta, n) for (int i = sta; i < n; i++)
#define Per(i, sta, n) for (int i = n - 1; i >= sta; i--)
#define rep1(i, n) for (int i = 1; i <= n; i++)
#define per1(i, n) for (int i = n; i >= 1; i--)
#define Rep1(i, sta, n) for (int i = sta; i <= n; i++)
typedef long double ld;
const ld eps = 1e-8;
const ld pi = acos(-1.0);
typedef pair<ll, ll> LP;
int dx[4] = {1, -1, 0, 0};
int dy[4] = {0, 0, 1, -1};

int n, q;
int v[300000], w[300000];
vector<P> bag[1200];

void rec(int s) {
  if (s == 0) {
    bag[0] = {P(0, 0), P(w[0], v[0])};
    return;
  }
  for (P p : bag[(s - 1) / 2]) {
    bag[s].push_back(p);
    bag[s].push_back(P(p.first + w[s], p.second + v[s]));
  }
  sort(bag[s].begin(), bag[s].end());
}

void solve() {
  cin >> n;
  rep(i, n) { cin >> v[i] >> w[i]; }
  int k = 0;
  while (k * k < n) {
    k++;
  }
  rep(i, k) rec(i);
  cin >> q;
  rep(_, q) {
    int s, L;
    cin >> s >> L;
    s--;
    vector<P> f = {P(0, 0)};
    int m = 1;
    while (s >= k) {
      rep(j, m) { f.push_back(P(w[s] + f[j].first, v[s] + f[j].second)); }
      s = (s - 1) / 2;
      m *= 2;
    }
    f.push_back(P(-mod, -mod));
    sort(f.begin(), f.end());
    int max_v = -mod;
    rep(j, f.size()) {
      max_v = max(f[j].second, max_v);
      f[j].second = max_v;
    }
    int id = f.size() - 1;
    int ans = 0;
    for (P p : bag[s]) {
      while (p.first + f[id].first > L) {
        id--;
      }
      ans = max(ans, p.second + f[id].second);
    }
    cout << ans << endl;
  }
}

int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout << fixed << setprecision(50);
  solve();
}


Error: 0

Fixed submission:

#include <algorithm>
#include <bitset>
#include <ciso646>
#include <cmath>
#include <complex>
#include <cstdio>
#include <functional>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <random>
#include <set>
#include <stack>
#include <string>
#include <tuple>
#include <unordered_map>
#include <utility>
#include <vector>
using namespace std;
typedef long long ll;
typedef unsigned int ui;
const ll mod = 1000000007;
const ll INF = (ll)1000000007 * 1000000007;
typedef pair<int, int> P;
#define stop                                                                   \\
  char nyaa;                                                                   \\
  cin >> nyaa;
#define rep(i, n) for (int i = 0; i < n; i++)
#define per(i, n) for (int i = n - 1; i >= 0; i--)
#define Rep(i, sta, n) for (int i = sta; i < n; i++)
#define Per(i, sta, n) for (int i = n - 1; i >= sta; i--)
#define rep1(i, n) for (int i = 1; i <= n; i++)
#define per1(i, n) for (int i = n; i >= 1; i--)
#define Rep1(i, sta, n) for (int i = sta; i <= n; i++)
typedef long double ld;
const ld eps = 1e-8;
const ld pi = acos(-1.0);
typedef pair<ll, ll> LP;
int dx[4] = {1, -1, 0, 0};
int dy[4] = {0, 0, 1, -1};

int n, q;
int v[300000], w[300000];
vector<P> bag[1200];

void rec(int s) {
  if (s == 0) {
    bag[0] = {P(0, 0), P(w[0], v[0])};
    return;
  }
  for (P p : bag[(s - 1) / 2]) {
    bag[s].push_back(p);
    bag[s].push_back(P(p.first + w[s], p.second + v[s]));
  }
  sort(bag[s].begin(), bag[s].end());
}

void solve() {
  cin >> n;
  rep(i, n) { cin >> v[i] >> w[i]; }
  rep(i, n / 2) rec(i);
  cin >> q;
  rep(_, q) {
    int s, L;
    cin >> s >> L;
    s--;
    vector<P> f = {P(0, 0)};
    int m = 1;
    while (s >= n / 2) {
      rep(j, m) { f.push_back(P(w[s] + f[j].first, v[s] + f[j].second)); }
      s = (s - 1) / 2;
      m *= 2;
    }
    f.push_back(P(-mod, -mod));
    sort(f.begin(), f.end());
    int max_v = -mod;
    rep(j, f.size()) {
      max_v = max(f[j].second, max_v);
      f[j].second = max_v;
    }
    int id = f.size() - 1;
    int ans = 0;
    for (P p : bag[s]) {
      while (p.first + f[id].first > L) {
        id--;
      }
      ans = max(ans, p.second + f[id].second);
    }
    cout << ans << endl;
  }
}

int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout << fixed << setprecision(50);
  solve();
}