Problem p02598 (C++)

Buggy submission (status: Runtime Error):
// NEVER GIVE UP I AM GOING TO IMPROVE ONE DAY.
// PRACTICE,PRACTICE,PRACTICE!!!
#include <bits/stdc++.h>
#define int long long int
// #define ull unsigned long long int
#define pb push_back
#define mp make_pair
#define mem(a, b) memset(a, b, sizeof(a))
#define inf 1e18
#define endl "\n"
#define all(v) v.begin(), v.end()
#define fast                                                                   \
  ios_base::sync_with_stdio(false);                                            \
  cin.tie(0);                                                                  \
  cout.tie(0);
#define dbg(x) cerr << #x << " = " << x << endl;
const int M = 100005;
const int mod = 1000000007;
const double pi = acos(-1.0);
using namespace std;
bool possible(int mid, int k, int a[], int n) {
  int cut = 0;
  for (int i = 0; i < n; i++) {
    cut += ((a[i] - 1) / mid);
  }
  if (cut <= k) {
    return true;
  }
  return false;
}
int32_t main() {

  // #ifndef ONLINE_JUDGE
  //     freopen("in.txt", "r", stdin);
  //     freopen("out.txt", "w", stdout);
  // #endif

  fast;
  int t;
  t = 1;
  // cin>>t;
  // int test=t;
  while (t--) {
    int n, k;
    cin >> n >> k;
    int a[n], maxi = -1;
    for (int i = 0; i < n; i++) {
      cin >> a[i];
      maxi = max(maxi, a[i]);
    }
    int low = 0, high = maxi, mid, ans = maxi;
    while (high >= low) {
      mid = low + ((high - low) / 2);
      if (possible(mid, k, a, n)) {
        ans = min(ans, mid);
        high = mid - 1;
      } else {
        low = mid + 1;
      }
    }
    cout << ans << endl;
  }
}

Fixed submission:
// NEVER GIVE UP I AM GOING TO IMPROVE ONE DAY.
// PRACTICE,PRACTICE,PRACTICE!!!
#include <bits/stdc++.h>
#define int long long int
// #define ull unsigned long long int
#define pb push_back
#define mp make_pair
#define mem(a, b) memset(a, b, sizeof(a))
#define inf 1e18
#define endl "\n"
#define all(v) v.begin(), v.end()
#define fast                                                                   \
  ios_base::sync_with_stdio(false);                                            \
  cin.tie(0);                                                                  \
  cout.tie(0);
#define dbg(x) cerr << #x << " = " << x << endl;
const int M = 100005;
const int mod = 1000000007;
const double pi = acos(-1.0);
using namespace std;
bool possible(int mid, int k, int a[], int n) {
  int cut = 0;
  if (mid == 0) {
    return false;
  }
  for (int i = 0; i < n; i++) {
    cut += ((a[i] - 1) / mid);
  }
  if (cut <= k) {
    return true;
  }
  return false;
}
int32_t main() {

  // #ifndef ONLINE_JUDGE
  //     freopen("in.txt", "r", stdin);
  //     freopen("out.txt", "w", stdout);
  // #endif

  fast;
  int t;
  t = 1;
  // cin>>t;
  // int test=t;
  while (t--) {
    int n, k;
    cin >> n >> k;
    int a[n], maxi = -1;
    for (int i = 0; i < n; i++) {
      cin >> a[i];
      maxi = max(maxi, a[i]);
    }
    int low = 0, high = maxi, mid, ans = maxi;
    while (high >= low) {
      mid = low + ((high - low) / 2);
      if (possible(mid, k, a, n)) {
        ans = min(ans, mid);
        high = mid - 1;
      } else {
        low = mid + 1;
      }
    }
    cout << ans << endl;
  }
}