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

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

// マクロ
// forループ関係
// 引数は、(ループ内変数,動く範囲)か(ループ内変数,始めの数,終わりの数)、のどちらか
// Dがついてないものはループ変数は1ずつインクリメントされ、Dがついてるものはループ変数は1ずつデクリメントされる
#define REP(i, n) for (lol i = 0; i < lol(n); i++)
#define REPD(i, n) for (lol i = n - 1; i >= 0; i--)
#define FOR(i, a, b) for (lol i = a; i <= lol(b); i++)
#define FORD(i, a, b) for (lol i = a; i >= lol(b); i--)
// xにはvectorなどのコンテナ
#define ALL(x) x.begin(), x.end() // sortなどの引数を省略したい
#define SIZE(x) lol(x.size())     // sizeをsize_tからllに直しておく
// 定数
#define PI 3.1415926535897932385 // pi
#define INF 1000000000000        // 10^12:極めて大きい値,∞
#define MOD 1000000007           // 10^9+7:合同式の法
#define MAXR 100000 // 10^5:配列の最大のrange(素数列挙などで使用)
// 最大値最小値
template <class T> bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T> bool chmin(T &a, const T &b) {
  if (b < a) {
    a = b;
    return 1;
  }
  return 0;
}
int gcd(int a, int b) { return b ? gcd(b, a % b) : a; }

int main() {
  lol result{0};
  lol n;
  cin >> n;
  lol k;
  cin >> k;
  vector<lol> a(n);
  lol ma{0};
  REP(i, n) {
    cin >> a[i];
    ma = max(ma, a[i]);
  }
  lol l{1}, r{ma};
  while (l < r) {
    lol mid = l + (r - l) / 2;
    lol cuts{0};
    REP(i, n) {
      if (a[i] % mid)
        cuts += a[i] / mid;
      else {
        cuts += (a[i] - 1) / mid;
      }
    }
    if (cuts > k)
      l = mid + 1;
    else {
      r = mid;
    }
  }
  result = l;

  cout << result << endl;
  return 0;
}

Error: 0

Fixed submission:

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

// マクロ
// forループ関係
// 引数は、(ループ内変数,動く範囲)か(ループ内変数,始めの数,終わりの数)、のどちらか
// Dがついてないものはループ変数は1ずつインクリメントされ、Dがついてるものはループ変数は1ずつデクリメントされる
#define REP(i, n) for (lol i = 0; i < lol(n); i++)
#define REPD(i, n) for (lol i = n - 1; i >= 0; i--)
#define FOR(i, a, b) for (lol i = a; i <= lol(b); i++)
#define FORD(i, a, b) for (lol i = a; i >= lol(b); i--)
// xにはvectorなどのコンテナ
#define ALL(x) x.begin(), x.end() // sortなどの引数を省略したい
#define SIZE(x) lol(x.size())     // sizeをsize_tからllに直しておく
// 定数
#define PI 3.1415926535897932385 // pi
#define INF 1000000000000        // 10^12:極めて大きい値,∞
#define MOD 1000000007           // 10^9+7:合同式の法
#define MAXR 100000 // 10^5:配列の最大のrange(素数列挙などで使用)
// 最大値最小値
template <class T> bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T> bool chmin(T &a, const T &b) {
  if (b < a) {
    a = b;
    return 1;
  }
  return 0;
}
int gcd(int a, int b) { return b ? gcd(b, a % b) : a; }

int main() {
  int result{0};
  int n;
  cin >> n;
  int k;
  cin >> k;
  priority_queue<double> a;
  vector<int> b(200010);
  int bi{0}, bi2{0};
  vector<int> c(200010);
  int ci{0}, ci2{0};
  REP(i, n) {
    double dou;
    cin >> dou;
    a.push(dou);
  }
  while (k > 0) {
    double ma = a.top();
    int maa = a.top();
    b[bi2] = ma;
    bi2++;
    // cout << "ma1:" << ma << endl;
    a.pop();
    double ma2 = a.top();
    // cout << "ma2:" << ma2 << endl;
    int k2{2};
    // cout << "c.front():" << c.front() << endl;
    if (c[ci] == maa) {
      ci++;
      int ma3 = b[bi];
      bi++;
      int watta = b[bi];
      bi++;
      watta++;
      while (k - k2 + 1 > 0 && ma3 / watta > ma2) {
        watta++;
        k2++;
      }
      ma = (double)ma3 / watta;
      // cout << "ma3/watta:" << ma << endl;
    } else {
      while (k - k2 + 1 > 0 && ma / k2 > ma2) {
        k2++;
      }
      ma = ma / k2;
    }
    a.push(ma);
    // a.push(ma);
    b[bi2] = k2;
    bi2++;
    c[ci2] = ma;
    ci2++;
    k = k - k2 + 1;
    // cout << "k:" << k << endl;
  }
  // cout << k << endl;
  // cout << fixed << setprecision(9) << a.top() << endl;
  result = ceil(a.top());

  cout << result << endl;
  return 0;
}