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

#include <bits/stdc++.h>
using namespace std;
#define REP(i, x, n) for (int i = x; i < (int)n; i++)
#define rep(i, n) REP(i, 0, n)
#define sp(p) cout << setprecision(16) << fixed << p << endl;
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()
#define SORT(a) sort(all(a))
#define RSORT(a) sort(rall(a))
#define UNIQ(a) unique(all(a))
#define UNIQNUM(a) UNIQ(a) - a.begin()
#define UNIQIT(a) a.erase(UNIQ(a), a.end());
#define VOUT(v, i)                                                             \\
  rep(i, v.size()) cout << v[i] << (i == v.size() - 1 ? "\\n" : " ");
#define vout(v) VOUT(v, z);
#define vdbg(v, i)                                                             \\
  cout << #v << ": ";                                                          \\
  for (int i = 0; i < (int)v.size(); i++) {                                    \\
    cout << v[i] << " ";                                                       \\
  }                                                                            \\
  cout << "\\n";
#define vmin(v) *min_element(all(v))
#define vmax(v) *max_element(all(v))
#define vsum(v) accumulate(all(v), 0LL)
#define MOUT(m, r, c)                                                          \\
  rep(i, r) {                                                                  \\
    rep(j, c) { cout << m[i][j] << " "; }                                      \\
    cout << endl;                                                              \\
  }
#define mout(m) MOUT(m, m.size(), m[0].size())
#define debg(a) cout << #a << ": " << a << endl;
#define show(a)                                                                \\
  for (cont & y : a) {                                                         \\
    for (cont & x : y) {                                                       \\
      cout << x << " ";                                                        \\
    }                                                                          \\
    cout << endl;                                                              \\
  }
#define digit(a) to_string(a).length();
template <class T> inline int out(const T &t) {
  print(t);
  putchar('\\n');
  return 0;
}
// template<class T>inline T gcd(T a,T b){if(b==0)return a; return(gcd(b,a%b));}
// template<class T>inline T lcm(T a,T b){return a/gcd(a,b)*b;}
bool is_palindrome(string s) { return s == string(s.rbegin(), s.rend()); }
typedef long long ll;
typedef long double ld;
typedef pair<ll, ll> P;
typedef vector<ll> V;
typedef vector<vector<ll>> VV;
// const long long MOD=1000000007;
const long long INF = 1e18;
#define EPS (1e-7)
#define PI (acos(-1))
template <class T> inline bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
template <class T> inline bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}

int main() {
  long long N;
  scanf("%lld", &N);
  long long M;
  scanf("%lld", &M);
  long long K;
  scanf("%lld", &K);
  std::vector<long long> A(N);
  for (int i = 0; i < N; i++) {
    scanf("%lld", &A[i]);
  }
  std::vector<long long> B(M);
  for (int i = 0; i < M; i++) {
    scanf("%lld", &B[i]);
  }
  std::vector<long long> aacc(N);
  aacc[0] = A[0];
  for (long long i = 1; i < N; i++) {
    aacc[i] = aacc[i - 1] + A[i];
  }
  std::vector<long long> bacc(M);
  bacc[0] = B[0];
  for (long long i = 1; i < M; i++) {
    bacc[i] = bacc[i - 1] + B[i];
  }
  // vout(aacc)
  // vout(bacc)

  // ll cnt=0;
  // for (long long i = 0; i < N; i++) {
  //     if(aacc[i]>K) break;
  //     ll ng = 0, ok = M-1;
  //     while (abs(ok - ng) > 1) {
  //       ll mid = (ok + ng) / 2;
  //     // debg(aacc[i]+bacc[mid]);
  //     if (aacc[i]+bacc[mid]>K) {
  //         ok = mid;
  //       } else {
  //         ng = mid;
  //       }
  //     }
  //     // debg(cnt);
  //     // debg(i);
  //     // debg(ok);
  //     // debg(ng);
  //     if(aacc[i]+bacc[ok]>K) ok--;
  //     chmax(cnt, i+1 + ok+1);
  // }

  ll cnt = 0;
  for (long long i = 0; i < N; i++) {
    if (aacc[i] > K)
      break;
    // auto itr = lower_bound(all(bacc), K-aacc[i]);
    auto itr = upper_bound(all(bacc), K - aacc[i]);
    // debg(*itr);
    ll idx = itr - bacc.begin();
    // debg(i);
    // debg(idx);
    while (idx >= 0 && aacc[i] + bacc[idx] > K)
      idx--;
    chmin(idx, M - 1);
    chmax(cnt, i + 1 + idx + 1);
  }

  ll acnt = 0;
  for (long long i = 0; i < N; i++) {
    if (aacc[i] <= K) {
      acnt++;
    }
  }
  chmax(cnt, acnt);

  ll bcnt = 0;
  for (long long i = 0; i < M; i++) {
    if (bacc[i] <= K) {
      bcnt++;
    }
  }
  // debg(bcnt);
  chmax(cnt, bcnt);

  cout << cnt << endl;

  return 0;
}


Error: 0

Fixed submission:

#include <bits/stdc++.h>
using namespace std;
#define REP(i, x, n) for (int i = x; i < (int)n; i++)
#define rep(i, n) REP(i, 0, n)
#define sp(p) cout << setprecision(16) << fixed << p << endl;
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()
#define SORT(a) sort(all(a))
#define RSORT(a) sort(rall(a))
#define UNIQ(a) unique(all(a))
#define UNIQNUM(a) UNIQ(a) - a.begin()
#define UNIQIT(a) a.erase(UNIQ(a), a.end());
#define VOUT(v, i)                                                             \\
  rep(i, v.size()) cout << v[i] << (i == v.size() - 1 ? "\\n" : " ");
#define vout(v) VOUT(v, z);
#define vdbg(v, i)                                                             \\
  cout << #v << ": ";                                                          \\
  for (int i = 0; i < (int)v.size(); i++) {                                    \\
    cout << v[i] << " ";                                                       \\
  }                                                                            \\
  cout << "\\n";
#define vmin(v) *min_element(all(v))
#define vmax(v) *max_element(all(v))
#define vsum(v) accumulate(all(v), 0LL)
#define MOUT(m, r, c)                                                          \\
  rep(i, r) {                                                                  \\
    rep(j, c) { cout << m[i][j] << " "; }                                      \\
    cout << endl;                                                              \\
  }
#define mout(m) MOUT(m, m.size(), m[0].size())
#define debg(a) cout << #a << ": " << a << endl;
#define show(a)                                                                \\
  for (cont & y : a) {                                                         \\
    for (cont & x : y) {                                                       \\
      cout << x << " ";                                                        \\
    }                                                                          \\
    cout << endl;                                                              \\
  }
#define digit(a) to_string(a).length();
template <class T> inline int out(const T &t) {
  print(t);
  putchar('\\n');
  return 0;
}
// template<class T>inline T gcd(T a,T b){if(b==0)return a; return(gcd(b,a%b));}
// template<class T>inline T lcm(T a,T b){return a/gcd(a,b)*b;}
bool is_palindrome(string s) { return s == string(s.rbegin(), s.rend()); }
typedef long long ll;
typedef long double ld;
typedef pair<ll, ll> P;
typedef vector<ll> V;
typedef vector<vector<ll>> VV;
// const long long MOD=1000000007;
const long long INF = 1e18;
#define EPS (1e-7)
#define PI (acos(-1))
template <class T> inline bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
template <class T> inline bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}

int main() {
  long long N;
  scanf("%lld", &N);
  long long M;
  scanf("%lld", &M);
  long long K;
  scanf("%lld", &K);
  std::vector<long long> A(N);
  for (int i = 0; i < N; i++) {
    scanf("%lld", &A[i]);
  }
  std::vector<long long> B(M);
  for (int i = 0; i < M; i++) {
    scanf("%lld", &B[i]);
  }
  std::vector<long long> aacc(N);
  aacc[0] = A[0];
  for (long long i = 1; i < N; i++) {
    aacc[i] = aacc[i - 1] + A[i];
  }
  std::vector<long long> bacc(M);
  bacc[0] = B[0];
  for (long long i = 1; i < M; i++) {
    bacc[i] = bacc[i - 1] + B[i];
  }
  // vout(aacc)
  // vout(bacc)
  ll cnt = 0;
  for (long long i = 0; i < N; i++) {
    if (aacc[i] > K)
      break;
    ll ng = 0, ok = M - 1;
    while (abs(ok - ng) > 1) {
      ll mid = (ok + ng) / 2;
      // debg(aacc[i]+bacc[mid]);
      if (aacc[i] + bacc[mid] > K) {
        ok = mid;
      } else {
        ng = mid;
      }
    }
    // debg(cnt);
    // debg(i);
    // debg(ok);
    // debg(ng);
    if (aacc[i] + bacc[ok] > K)
      ok--;
    chmax(cnt, i + 1 + ok + 1);
  }
  ll acnt = 0;
  for (long long i = 0; i < M; i++) {
    if (aacc[i] <= K) {
      acnt++;
    }
  }
  chmax(cnt, acnt);
  ll bcnt = 0;
  for (long long i = 0; i < M; i++) {
    if (bacc[i] <= K) {
      bcnt++;
    }
  }
  // debg(bcnt);
  chmax(cnt, bcnt);
  cout << cnt << endl;

  return 0;
}