Problem p02623 (C++) — buggy submission, verdict: Time Limit Exceeded

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vi = vector<int>;
#define LIMIT 1000000007 // 10^9+7
#define rep(i, n) for (int i = 0; i < (int)n; i++)
#define all(v) (v).begin(), (v).end()

namespace /* debug */ {
#define DEBUG(...)                                                             \\
  do {                                                                         \\
    cout << #__VA_ARGS__ << " = ";                                             \\
    debug(__VA_ARGS__);                                                        \\
  } while (0) // 変数
#define ldebug(...)                                                            \\
  do {                                                                         \\
    cout << "[" << setw(3) << __LINE__ << "] ";                                \\
    debug(__VA_ARGS__);                                                        \\
  } while (0) // 行数
#define lDEBUG(...)                                                            \\
  do {                                                                         \\
    cout << "[" << setw(3) << __LINE__ << "] " << #__VA_ARGS__ << " = ";       \\
    debug(__VA_ARGS__);                                                        \\
  } while (0)                                                 // 変数, 行数
template <class T> void show(T &x) { cout << x << " "; }      // 出力
template <class T> void showendl(T &x) { cout << x << endl; } // 出力改行
template <class P, class Q> void show(pair<P, Q> &x) {
  cout << "(" << x.first << ", " << x.second << ") ";
} // pair出力
template <class P, class Q> void showendl(pair<P, Q> &x) {
  cout << "(" << x.first << ", " << x.second << ")" << endl;
} // pair出力改行
template <class H> void debug(H &&h) { showendl(h); } // 引数1つ
template <class H, class... Ts> void debug(H &&h, Ts &&...ts) {
  show(h);
  debug(forward<Ts>(ts)...);
} // 可変引数
template <class T> void debug(vector<T> &vt) {
  int i = 0;
  for (auto x : vt)
    ++i != vt.size() ? show(x) : showendl(x);
} // vector出力
template <class T> void debug(initializer_list<T> init) {
  int i = 0;
  for (auto x : init)
    ++i != init.size() ? show(x) : showendl(x);
} // 初期化子リスト出力
} // namespace
int N, M, K;
vector<ll> SA, SB;

bool check(int i, int j) {
  if (i > N || i < 0)
    return false;
  if (j > M || j < 0)
    return false;
  if ((SA[i] + SB[j]) <= K)
    return true;
  else
    return false;
}

int main() {
  cin >> N >> M >> K;

  SA.resize(N + 1, 0);
  SB.resize(M + 1, 0);

  for (int i = 1; i <= N; i++) {
    int a;
    cin >> a;
    SA[i] = SA[i - 1] + a;
  }
  for (int i = 1; i <= M; i++) {
    int b;
    cin >> b;
    SB[i] = SB[i - 1] + b;
  }
  ll ans = 0;
  rep(i, N + 1) {
    if (SA[i] > K)
      continue;
    int ok = 0;
    int ng = M + 1;
    while ((ng - ok) > 1) {
      int mid = (ok + ng) / 2;
      if (check(i, mid)) {
        ok = mid;
      } else {
        ng = mid;
      }
    }
    // DEBUG(i,ok);
    ans = max(ans, (ll)i + ok);
  }

  cout << ans << endl;
}

Error: TLE

Fixed submission:

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vi = vector<int>;
#define LIMIT 1000000007 // 10^9+7
#define rep(i, n) for (int i = 0; i < (int)n; i++)
#define all(v) (v).begin(), (v).end()

namespace /* debug */ {
#define DEBUG(...)                                                             \\
  do {                                                                         \\
    cout << #__VA_ARGS__ << " = ";                                             \\
    debug(__VA_ARGS__);                                                        \\
  } while (0) // 変数
#define ldebug(...)                                                            \\
  do {                                                                         \\
    cout << "[" << setw(3) << __LINE__ << "] ";                                \\
    debug(__VA_ARGS__);                                                        \\
  } while (0) // 行数
#define lDEBUG(...)                                                            \\
  do {                                                                         \\
    cout << "[" << setw(3) << __LINE__ << "] " << #__VA_ARGS__ << " = ";       \\
    debug(__VA_ARGS__);                                                        \\
  } while (0)                                                 // 変数, 行数
template <class T> void show(T &x) { cout << x << " "; }      // 出力
template <class T> void showendl(T &x) { cout << x << endl; } // 出力改行
template <class P, class Q> void show(pair<P, Q> &x) {
  cout << "(" << x.first << ", " << x.second << ") ";
} // pair出力
template <class P, class Q> void showendl(pair<P, Q> &x) {
  cout << "(" << x.first << ", " << x.second << ")" << endl;
} // pair出力改行
template <class H> void debug(H &&h) { showendl(h); } // 引数1つ
template <class H, class... Ts> void debug(H &&h, Ts &&...ts) {
  show(h);
  debug(forward<Ts>(ts)...);
} // 可変引数
template <class T> void debug(vector<T> &vt) {
  int i = 0;
  for (auto x : vt)
    ++i != vt.size() ? show(x) : showendl(x);
} // vector出力
template <class T> void debug(initializer_list<T> init) {
  int i = 0;
  for (auto x : init)
    ++i != init.size() ? show(x) : showendl(x);
} // 初期化子リスト出力
} // namespace
vector<ll> SA, SB;

bool check(int i, int j) {
  // if((SA[i]+SB[i]))
}

int main() {
  int N, M, K;
  cin >> N >> M >> K;

  SA.resize(N + 1, 0);
  SB.resize(M + 1, 0);

  for (int i = 1; i <= N; i++) {
    int a;
    cin >> a;
    SA[i] = SA[i - 1] + a;
  }
  for (int i = 1; i <= M; i++) {
    int b;
    cin >> b;
    SB[i] = SB[i - 1] + b;
  }
  ll ans = 0;
  rep(i, N + 1) {
    rep(j, M + 1) {
      if ((SA[i] + SB[j]) <= K) {
        ans = max(ans, (ll)i + j);
      } else {
        break;
      }
    }
  }

  cout << ans << endl;
}