Problem p03176 (C++)

Buggy submission (status: Runtime Error):
/*
author: madhav_1999 aka orthodoxparadox
22-Jan-2019
00:04:07
*/

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/detail/standard_policies.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;

#define dbl long double
#define int ll
#define ll long long
#define pii pair<int, int>
#define fup(i, begin, end)                                                     \
  for (__typeof(end) i = (begin) - ((begin) > (end));                          \
       i != (end) - ((begin) > (end)); i += 1 - 2 * ((begin) > (end)))
#define fnu for (ll i = 0; i < n; i++)
#define rev(Y) reverse(all(Y))
#define oiint ostream_iterator<int>(cout, " ")
#define pb emplace_back
#define mp make_pair
#define ff first
#define ss second
#define endl '\n'
#define all(a) a.begin(), a.end()
#define initialise(a, x) memset(a, x, sizeof(a))
#define onlyunique(v) v.erase(unique(all(v)), v.end()); // only for sorted
                                                        // vector
#pragma comment(linker, "/stack:200000000")
#pragma GCC optimize("O3")
#pragma GCC optimize("O2")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#define _CRT_SECURE_NO_WARNINGS
#ifdef __APPLE__
#define dbg(...) __f(#__VA_ARGS__, __VA_ARGS__)
template <typename Arg1> void __f(const char *name, Arg1 &&arg1) {
  cerr << name << " : " << arg1 << endl;
}
template <typename Arg1, typename... Args>
void __f(const char *names, Arg1 &&arg1, Args &&...args) {
  const char *comma = strchr(names + 1, ',');
  cerr.write(names, comma - names) << " : " << arg1 << "  ";
  __f(comma + 1, args...);
}
#else
#define dbg(...)
#endif
template <typename X> ostream &operator<<(ostream &x, const vector<X> &v) {
  for (int i = 0; i < v.size(); ++i)
    x << v[i] << " ";
  return x;
}
template <typename X> ostream &operator<<(ostream &x, const set<X> &v) {
  for (auto it : v)
    x << it << " ";
  return x;
}
template <typename X, typename Y>
ostream &operator<<(ostream &x, const pair<X, Y> &v) {
  x << v.ff << " " << v.ss;
  return x;
}
typedef tree<int, null_type, less<int>, rb_tree_tag,
             tree_order_statistics_node_update>
    ordered_set;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
struct pair_hash {
  inline std::size_t operator()(const std::pair<int, int> &v) const {
    return v.first * 31 + v.second;
  }
};
const int mod = 1e9 + 7;

int takemod(int a) { return ((a % mod) + mod) % mod; }

int fast_exp(int base, int expo) {
  int res = 1;
  while (expo > 0) {
    if (expo & 1)
      res = (res * base) % mod;
    base = (base * base) % mod;
    expo >>= 1;
  }
  return res;
}

int modinv(int a) { return takemod(fast_exp(takemod(a), mod - 2)); }

const int N = 1e5 + 10;
int h[N];
int bt[N];
int st[4 * N];

int query(int id, int l, int r, int s, int e) {
  if (s > r or e < l)
    return 0;
  if (l >= s and r <= e) {
    return st[id];
  }
  int mid = (l + r) >> 1;
  int q1 = query(2 * id, l, mid, s, e);
  int q2 = query(2 * id + 1, mid + 1, r, s, e);
  return max(q1, q2);
}

void update(int id, int l, int r, int pos, int val) {
  if (l == r) {
    st[id] = val;
    return;
  }
  int mid = (l + r) >> 1;
  if (pos <= mid) {
    update(2 * id, l, mid, pos, val);
  } else {
    update(2 * id + 1, mid + 1, r, pos, val);
  }
  st[id] = max(st[2 * id], st[2 * id + 1]);
}

signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
#ifdef __APPLE__
  freopen("input.txt", "r", stdin);
  freopen("output.txt", "w", stdout);
  freopen("error.txt", "w", stderr);
#endif
  clock_t t1, t2;
  t1 = clock();

  int n;
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> h[i];
  }
  for (int i = 1; i <= n; i++) {
    cin >> bt[i];
  }
  for (int i = 1; i <= n; i++) {
    int r = query(1, 1, n, 1, h[i] - 1);
    update(1, 1, n, h[i], r + bt[i]);
  }
  cout << st[1];
  t2 = clock();
  cerr << "time taken: " << (t2 - t1) / (dbl)CLOCKS_PER_SEC;
  return 0;
}

Fixed submission:
/*
author: madhav_1999 aka orthodoxparadox
22-Jan-2019
00:04:07
*/

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/detail/standard_policies.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;

#define dbl long double
#define int ll
#define ll long long
#define pii pair<int, int>
#define fup(i, begin, end)                                                     \
  for (__typeof(end) i = (begin) - ((begin) > (end));                          \
       i != (end) - ((begin) > (end)); i += 1 - 2 * ((begin) > (end)))
#define fnu for (ll i = 0; i < n; i++)
#define rev(Y) reverse(all(Y))
#define oiint ostream_iterator<int>(cout, " ")
#define pb emplace_back
#define mp make_pair
#define ff first
#define ss second
#define endl '\n'
#define all(a) a.begin(), a.end()
#define initialise(a, x) memset(a, x, sizeof(a))
#define onlyunique(v) v.erase(unique(all(v)), v.end()); // only for sorted
                                                        // vector
#pragma comment(linker, "/stack:200000000")
#pragma GCC optimize("O3")
#pragma GCC optimize("O2")
#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#define _CRT_SECURE_NO_WARNINGS
#ifdef __APPLE__
#define dbg(...) __f(#__VA_ARGS__, __VA_ARGS__)
template <typename Arg1> void __f(const char *name, Arg1 &&arg1) {
  cerr << name << " : " << arg1 << endl;
}
template <typename Arg1, typename... Args>
void __f(const char *names, Arg1 &&arg1, Args &&...args) {
  const char *comma = strchr(names + 1, ',');
  cerr.write(names, comma - names) << " : " << arg1 << "  ";
  __f(comma + 1, args...);
}
#else
#define dbg(...)
#endif
template <typename X> ostream &operator<<(ostream &x, const vector<X> &v) {
  for (int i = 0; i < v.size(); ++i)
    x << v[i] << " ";
  return x;
}
template <typename X> ostream &operator<<(ostream &x, const set<X> &v) {
  for (auto it : v)
    x << it << " ";
  return x;
}
template <typename X, typename Y>
ostream &operator<<(ostream &x, const pair<X, Y> &v) {
  x << v.ff << " " << v.ss;
  return x;
}
typedef tree<int, null_type, less<int>, rb_tree_tag,
             tree_order_statistics_node_update>
    ordered_set;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
struct pair_hash {
  inline std::size_t operator()(const std::pair<int, int> &v) const {
    return v.first * 31 + v.second;
  }
};
const int mod = 1e9 + 7;

int takemod(int a) { return ((a % mod) + mod) % mod; }

int fast_exp(int base, int expo) {
  int res = 1;
  while (expo > 0) {
    if (expo & 1)
      res = (res * base) % mod;
    base = (base * base) % mod;
    expo >>= 1;
  }
  return res;
}

int modinv(int a) { return takemod(fast_exp(takemod(a), mod - 2)); }

const int N = 2e5 + 10;
int h[N];
int bt[N];
int st[4 * N];

int query(int id, int l, int r, int s, int e) {
  if (s > r or e < l)
    return 0;
  if (l >= s and r <= e) {
    return st[id];
  }
  int mid = (l + r) >> 1;
  int q1 = query(2 * id, l, mid, s, e);
  int q2 = query(2 * id + 1, mid + 1, r, s, e);
  return max(q1, q2);
}

void update(int id, int l, int r, int pos, int val) {
  if (l == r) {
    st[id] = val;
    return;
  }
  int mid = (l + r) >> 1;
  if (pos <= mid) {
    update(2 * id, l, mid, pos, val);
  } else {
    update(2 * id + 1, mid + 1, r, pos, val);
  }
  st[id] = max(st[2 * id], st[2 * id + 1]);
}

signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
#ifdef __APPLE__
  freopen("input.txt", "r", stdin);
  freopen("output.txt", "w", stdout);
  freopen("error.txt", "w", stderr);
#endif
  clock_t t1, t2;
  t1 = clock();

  int n;
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> h[i];
  }
  for (int i = 1; i <= n; i++) {
    cin >> bt[i];
  }
  for (int i = 1; i <= n; i++) {
    int r = query(1, 1, n, 1, h[i] - 1);
    update(1, 1, n, h[i], r + bt[i]);
  }
  cout << st[1];
  t2 = clock();
  cerr << "time taken: " << (t2 - t1) / (dbl)CLOCKS_PER_SEC;
  return 0;
}