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

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

#define SPEED                                                                  \\
  ios::sync_with_stdio(false);                                                 \\
  cin.tie(0);                                                                  \\
  cout.tie(0)
#define MP make_pair
#define pb push_back
#define ff first
#define ss second
#define sz(x) x.size()
#define all(c) c.begin(), c.end()
#define int long long
#define fr(i, j, x) for (int i = j; i < x; i++)
#define rep(i, j, x) for (int i = j; i <= x; i++)
#define rev(i, j, x) for (int i = j; i >= x; i--)
#define mem(x, val) memset(x, val, sizeof(x))
#define endl '\\n'
#define vi vector<int>
#define pii pair<int, int>

const int mod = 1e9 + 7;
const int N = 2e5 + 10;
const int INF = 1e8;

// int n,c[N],q,l,r;
// set<int>t[4*N];

// void build(int i,int l,int r){
//     if(l==r){
//         t[i].insert(c[l]);
//         return;
//     }
//     int mid=(l+r)/2;
//     build(i*2,l,mid);
//     build(i*2+1,mid+1,r);
//     t[i].insert(t[2*i].begin(),t[2*i].end());
//     t[i].insert(t[2*i+1].begin(),t[2*i+1].end());
// }

// set<int> query(int index,int l,int r,int lq,int rq){
//     set<int> left, right, result;
//     if(l>rq || lq>r){
//         return result;
//     }
//     if(lq<=l && r<=rq){
//         return t[index];
//     }
//     int mid=(l+r)/2;
//     left = query(2*index,l,mid,lq,rq);
//     result.insert(left.begin(), left.end());

//     right = query(2*index+1,mid+1,r,lq,rq);
//     result.insert(right.begin(), right.end());
//     return result;
// }

// void solve(){
//     cin>>n>>q;
//     rep(i,0,n-1){
//         cin>>c[i];
//     }
//     build(1,0,n-1);
//     set<int>now;
//     while(q--){
//         cin>>l>>r;
//         now=query(1,0,n-1,l-1,r-1);
//         cout<<now.size()<<endl;
//     }
// }

int n, k, lo, hi, mid, ans, a[N];

int chk(int x) {
  int cnt = 0;
  rep(i, 1, n) { cnt += (a[i] - 1) / x; }
  return (cnt <= k);
}

void solve() {
  cin >> n >> k;
  hi = 0;
  rep(i, 1, n) {
    cin >> a[i];
    hi = max(hi, a[i]);
  }
  lo = 1;
  ans = hi;
  while (lo <= hi) {
    mid = (lo + hi) / 2;
    if (chk(mid)) {
      ans = mid;
      hi = mid - 1;
    } else {
      lo = mid + 1;
    }
  }
  cout << ans << endl;
}

int32_t main() {
  SPEED;
  int T = 1;
  // cin>>T;
  int t1 = 1;
  while (true) {
    // cout<<"Case #"<<t1<<": ";
    // cout<<endl;
    solve();
    t1++;
    if (t1 > T)
      break;
  }
}


Error: 0

Fixed submission:

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

#define SPEED                                                                  \\
  ios::sync_with_stdio(false);                                                 \\
  cin.tie(0);                                                                  \\
  cout.tie(0)
#define MP make_pair
#define pb push_back
#define ff first
#define ss second
#define sz(x) x.size()
#define all(c) c.begin(), c.end()
#define int long long
#define fr(i, j, x) for (int i = j; i < x; i++)
#define rep(i, j, x) for (int i = j; i <= x; i++)
#define rev(i, j, x) for (int i = j; i >= x; i--)
#define mem(x, val) memset(x, val, sizeof(x))
#define endl '\\n'
#define vi vector<int>
#define pii pair<int, int>

const int mod = 1e9 + 7;
const int N = 2e5 + 10;
const int INF = 1e8;

// int n,c[N],q,l,r;
// set<int>t[4*N];

// void build(int i,int l,int r){
//     if(l==r){
//         t[i].insert(c[l]);
//         return;
//     }
//     int mid=(l+r)/2;
//     build(i*2,l,mid);
//     build(i*2+1,mid+1,r);
//     t[i].insert(t[2*i].begin(),t[2*i].end());
//     t[i].insert(t[2*i+1].begin(),t[2*i+1].end());
// }

// set<int> query(int index,int l,int r,int lq,int rq){
//     set<int> left, right, result;
//     if(l>rq || lq>r){
//         return result;
//     }
//     if(lq<=l && r<=rq){
//         return t[index];
//     }
//     int mid=(l+r)/2;
//     left = query(2*index,l,mid,lq,rq);
//     result.insert(left.begin(), left.end());

//     right = query(2*index+1,mid+1,r,lq,rq);
//     result.insert(right.begin(), right.end());
//     return result;
// }

// void solve(){
//     cin>>n>>q;
//     rep(i,0,n-1){
//         cin>>c[i];
//     }
//     build(1,0,n-1);
//     set<int>now;
//     while(q--){
//         cin>>l>>r;
//         now=query(1,0,n-1,l-1,r-1);
//         cout<<now.size()<<endl;
//     }
// }

int n, k, lo, hi, mid, ans, a[N];

int chk(int x) {
  int cnt = 0;
  rep(i, 1, n) { cnt += a[i] / x; }
  return (cnt <= k);
}

void solve() {
  cin >> n >> k;
  hi = 0;
  rep(i, 1, n) {
    cin >> a[i];
    hi = max(hi, a[i]);
  }
  lo = 0;
  ans = hi;
  while (lo <= hi) {
    mid = (lo + hi) / 2;
    if (chk(mid)) {
      ans = mid;
      hi = mid - 1;
    } else {
      lo = mid + 1;
    }
  }
  cout << ans << endl;
}

int32_t main() {
  SPEED;
  int T = 1;
  // cin>>T;
  int t1 = 1;
  while (true) {
    // cout<<"Case #"<<t1<<": ";
    // cout<<endl;
    solve();
    t1++;
    if (t1 > T)
      break;
  }
}