Problem p02598 (C++)

Buggy submission (status: Runtime Error):
// om namah shivaay
// faith over fear
// no one wants to die,yet death is the destination we all share
//  don't think you are,know you are!!

#include <bits/stdc++.h>
using namespace std;

#define mp make_pair
#define mt make_tuple
#define fi first
#define se second
#define pb push_back
#define ll long long
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define rep(i, n) for (i = 0; i < n; i++)
#define forn(i, n) for (ll i = 0; i < (ll)(n); ++i)
#define for1(i, n) for (ll i = 1; i <= (ll)(n); ++i)
#define ford(i, n) for (ll i = (ll)(n)-1; i >= 0; --i)
#define fore(i, a, b) for (ll i = (ll)(a); i <= (ll)(b); ++i)
#define fora(it, x) for (auto it : x)
#define PI 3.14159265
#define sync                                                                   \
  ios_base::sync_with_stdio(false);                                            \
  cin.tie(0);                                                                  \
  cout.tie(0);
#define endl "\n"

typedef pair<ll, ll> pii;
typedef vector<ll> vi;
typedef vector<pii> vpi;
typedef vector<vi> vvi;
typedef long long i64;
typedef vector<i64> vi64;
typedef vector<vi64> vvi64;
typedef pair<i64, i64> pi64;
typedef long double ld;

template <class T> bool uin(T &a, T b) { return a > b ? (a = b, true) : false; }
template <class T> bool uax(T &a, T b) { return a < b ? (a = b, true) : false; }

ll a[2 * 100002];

ll fun(ll m, ll n) {
  ll s = 0;
  forn(i, n) { s += (a[i] - 1) / m; }
  return (s);
}

int main() {
  ll n, k;
  cin >> n >> k;
  forn(i, n) cin >> a[i];
  ll f = 0, l = 1e18;
  while (f < l) {
    ll m = (f + l) / 2;
    ll val = fun(m, n);
    if (val <= k)
      l = m;
    else
      f = m + 1;
  }
  cout << f;
}


Fixed submission:
// om namah shivaay
// faith over fear
// no one wants to die,yet death is the destination we all share
//  don't think you are,know you are!!

#include <bits/stdc++.h>
using namespace std;

#define mp make_pair
#define mt make_tuple
#define fi first
#define se second
#define pb push_back
#define ll long long
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define rep(i, n) for (i = 0; i < n; i++)
#define forn(i, n) for (ll i = 0; i < (ll)(n); ++i)
#define for1(i, n) for (ll i = 1; i <= (ll)(n); ++i)
#define ford(i, n) for (ll i = (ll)(n)-1; i >= 0; --i)
#define fore(i, a, b) for (ll i = (ll)(a); i <= (ll)(b); ++i)
#define fora(it, x) for (auto it : x)
#define PI 3.14159265
#define sync                                                                   \
  ios_base::sync_with_stdio(false);                                            \
  cin.tie(0);                                                                  \
  cout.tie(0);
#define endl "\n"

typedef pair<ll, ll> pii;
typedef vector<ll> vi;
typedef vector<pii> vpi;
typedef vector<vi> vvi;
typedef long long i64;
typedef vector<i64> vi64;
typedef vector<vi64> vvi64;
typedef pair<i64, i64> pi64;
typedef long double ld;

template <class T> bool uin(T &a, T b) { return a > b ? (a = b, true) : false; }
template <class T> bool uax(T &a, T b) { return a < b ? (a = b, true) : false; }

ll a[2 * 100002];

ll fun(ll m, ll n) {
  ll s = 0;
  forn(i, n) { s += (a[i] - 1) / m; }
  return (s);
}

int main() {
  ll n, k;
  cin >> n >> k;
  forn(i, n) cin >> a[i];
  ll f = 1, l = 1e18;
  while (f < l) {
    ll m = (f + l) / 2;
    ll val = fun(m, n);
    if (val <= k)
      l = m;
    else
      f = m + 1;
  }
  cout << f;
}