Problem p03176 (C++)

Buggy submission (status: Runtime Error):
/*
░░░░░░░░░░░░░░░░▄▄█▀▀██▄▄░░░░░░░
░░░░░░░░░░░░░▄█▀▀░░░░░░░▀█░░░░░░
░░░░░░░░░░░▄▀░░░░░░░░░░░░░█░░░░░
░░░░░░░░░▄█░░░░░░░░░░░░░░░█░░░░░
░░░░░░░██▀░░░░░░░▄▄▄░░▄░█▄█▄░░░░
░░░░░▄▀░░░░░░░░░░████░█▄██░▀▄░░░
░░░░█▀░░░░░░░░▄▄██▀░░█████░██░░░
░░░█▀░░░░░░░░░▀█░▀█▀█▀▀▄██▄█▀░░░
░░░██░░░░░░░░░░█░░█░█░░▀▀▄█▀░░░░
░░░░█░░░░░█░░░▀█░░░░▄░░░░░▄█░░░░
░░░░▀█░░░░███▄░█░░░░░░▄▄▄▄█▀█▄░░
░░░░░▀██░░█▄▀▀██░░░░░░░░▄▄█░░▀▄░
░░░░░░▀▀█▄░▀▄▄░▄░░░░░░░███▀░░▄██
░░░░░░░░░▀▀▀███▀█▄░░░░░█▀░▀░░░▀█
░░░░░░░░░░░░▄▀░░░▀█▄░░░░░▄▄░░▄█▀
░░░▄▄▄▀▀▀▀▀█▀░░░░░█▄▀▄▄▄▄▄▄█▀▀░░
░▄█░░░▄██▀░░░░░░░░░█▄░░░░░░░░░░░
█▀▀░▄█░░░░░░░░░░░░░░▀▀█▄░░░░░░░░
█░░░█░░░░░░░░░░░░░░░░░░█▄░░░░░░░
*/
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define dbg(x) cout << #x << '=' << x << '\n';
#define ll long long
#define x first
#define y second
#define pi pair<int, int>
#define vi vector<int>
// #define =1e9 =(int)1e9
const ll mod = 1000000007;
const ll nmax = 3000001;
#define int ll
int n, h[100005], a[100005], seg[400005];

void upd(int nod, int l, int r, int pos, int v) {
  if (l == r)
    seg[nod] = v;
  else {
    int mid = (l + r) >> 1;
    if (pos <= mid)
      upd(2 * nod, l, mid, pos, v);
    else
      upd(2 * nod + 1, mid + 1, r, pos, v);
    seg[nod] = max(seg[2 * nod], seg[2 * nod + 1]);
  }
}

int qry(int nod, int l, int r, int lq, int rq) {
  if (rq < l || r < lq)
    return 0LL;
  else if (lq <= l && r <= rq)
    return seg[nod];
  else {
    int mid = (l + r) >> 1;
    return max(qry(2 * nod, l, mid, lq, rq),
               qry(2 * nod + 1, mid + 1, r, lq, rq));
  }
}

int32_t main() {
  ios_base::sync_with_stdio(0);
  cin.tie();
  cout.tie();
  cin >> n;
  for (int i = 1; i <= n; i++)
    cin >> h[i];
  for (int i = 1; i <= n; i++)
    cin >> a[i];
  for (int i = 1; i <= n; i++) {
    int x = qry(1, 1, n, 1, h[i]);
    upd(1, 1, n, h[i], x + a[i]);
    // cout<<"i: "; for(int j=1; j<=n; j++) cout<<qry(1, 1, n, j, j)<<" ";
    // cout<<endl;
  }
  cout << qry(1, 1, n, 1, n);
}


Fixed submission:
/*
░░░░░░░░░░░░░░░░▄▄█▀▀██▄▄░░░░░░░
░░░░░░░░░░░░░▄█▀▀░░░░░░░▀█░░░░░░
░░░░░░░░░░░▄▀░░░░░░░░░░░░░█░░░░░
░░░░░░░░░▄█░░░░░░░░░░░░░░░█░░░░░
░░░░░░░██▀░░░░░░░▄▄▄░░▄░█▄█▄░░░░
░░░░░▄▀░░░░░░░░░░████░█▄██░▀▄░░░
░░░░█▀░░░░░░░░▄▄██▀░░█████░██░░░
░░░█▀░░░░░░░░░▀█░▀█▀█▀▀▄██▄█▀░░░
░░░██░░░░░░░░░░█░░█░█░░▀▀▄█▀░░░░
░░░░█░░░░░█░░░▀█░░░░▄░░░░░▄█░░░░
░░░░▀█░░░░███▄░█░░░░░░▄▄▄▄█▀█▄░░
░░░░░▀██░░█▄▀▀██░░░░░░░░▄▄█░░▀▄░
░░░░░░▀▀█▄░▀▄▄░▄░░░░░░░███▀░░▄██
░░░░░░░░░▀▀▀███▀█▄░░░░░█▀░▀░░░▀█
░░░░░░░░░░░░▄▀░░░▀█▄░░░░░▄▄░░▄█▀
░░░▄▄▄▀▀▀▀▀█▀░░░░░█▄▀▄▄▄▄▄▄█▀▀░░
░▄█░░░▄██▀░░░░░░░░░█▄░░░░░░░░░░░
█▀▀░▄█░░░░░░░░░░░░░░▀▀█▄░░░░░░░░
█░░░█░░░░░░░░░░░░░░░░░░█▄░░░░░░░
*/
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define dbg(x) cout << #x << '=' << x << '\n';
#define ll long long
#define x first
#define y second
#define pi pair<int, int>
#define vi vector<int>
// #define =1e9 =(int)1e9
const ll mod = 1000000007;
const ll nmax = 3000001;
#define int ll
int n, h[200005], a[200005], seg[800005];

void upd(int nod, int l, int r, int pos, int v) {
  if (l == r)
    seg[nod] = v;
  else {
    int mid = (l + r) >> 1;
    if (pos <= mid)
      upd(2 * nod, l, mid, pos, v);
    else
      upd(2 * nod + 1, mid + 1, r, pos, v);
    seg[nod] = max(seg[2 * nod], seg[2 * nod + 1]);
  }
}

int qry(int nod, int l, int r, int lq, int rq) {
  if (rq < l || r < lq)
    return 0LL;
  else if (lq <= l && r <= rq)
    return seg[nod];
  else {
    int mid = (l + r) >> 1;
    return max(qry(2 * nod, l, mid, lq, rq),
               qry(2 * nod + 1, mid + 1, r, lq, rq));
  }
}

int32_t main() {
  ios_base::sync_with_stdio(0);
  cin.tie();
  cout.tie();
  cin >> n;
  for (int i = 1; i <= n; i++)
    cin >> h[i];
  for (int i = 1; i <= n; i++)
    cin >> a[i];
  for (int i = 1; i <= n; i++) {
    int x = qry(1, 1, n, 1, h[i]);
    upd(1, 1, n, h[i], x + a[i]);
    // cout<<"i: "; for(int j=1; j<=n; j++) cout<<qry(1, 1, n, j, j)<<" ";
    // cout<<endl;
  }
  cout << qry(1, 1, n, 1, n);
}