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

/*
मनस्वी म्रियते कामं कार्पण्यं न तु गच्छति ।
अपि निर्वाणमायाति नानलो याति शीतताम् ॥
*/

#include <bits/stdc++.h>
// #include <ext/pb_ds/assoc_container.hpp>
// #include <ext/pb_ds/tree_policy.hpp>
// using namespace __gnu_pbds;
using namespace std;

#define mod 1000000007
#define pb push_back
#define ll long long int
#define ull unsigned ll
#define ld long double
#define vi vector<int>
#define vl vector<ll>
#define v2i vector<vector<int>>
#define v2l vector<vector<ll>>
#define ppi pair<int, int>
#define ppl pair<ll, ll>
#define vpi vector<ppi>
#define vpl vector<ppl>
#define all(x) x.begin(), x.end()
#define ff first
#define ss second
#define forn(i, a, b) for (int i = a; i < b; i++)
#define forr(i, a, b) for (int i = a; i >= b; i--)
#define forv(i, m) for (auto i : m)
#define p2d(v)                                                                 \\
  for (auto a : v) {                                                           \\
    for (auto b : a)                                                           \\
      cout << b << " ";                                                        \\
    cout << endl;                                                              \\
  }
#define p1d(v)                                                                 \\
  for (auto a : v)                                                             \\
    cout << a << " ";                                                          \\
  cout << endl;
#define ppd(v)                                                                 \\
  for (auto a : v)                                                             \\
    cout << a.ff << " " << a.ss << endl;
#define imx INT_MAX
#define imn INT_MIN
#define inf 9000000000000000000
#define minf -inf
#define endl "\\n"
#define fast                                                                   \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(NULL);
#define sze size()
#define rvs reverse
#define itr iterator
#define pre cout << fixed << setprecision(10);
#define umap unordered_map
#define uset unordered_set
#define pi 3.141592653589793
#define MAXN 100005
#define test1(x) cout << #x " = " << x << endl;
#define test2(x, y) cout << #x " = " << x << " " << #y " = " << y << endl;
#define test3(x, y, z)                                                         \\
  cout << #x " = " << x << " " << #y " = " << y << " " << #z " = " << z << endl;
#define test4(w, x, y, z)                                                      \\
  cout << #w " = " << w << " " << #x " = " << x << " " << #y " = " << y << " " \\
       << #z " = " << z << endl;
#define oset                                                                   \\
  tree<ll, null_type, less<ll>, rb_tree_tag, tree_order_statistics_node_update>

/*
const ll infinity = 9e18;

bool compare(ll a,ll b) {return a > b;}
bool compare1(ppl a,ppl b) {return a.ff > b.ff;}
bool compare2(ppl a,ppl b) {return a.ss < b.ss;}
bool isprime(ll n){if(n < 2) return 0; ll i = 2; while(i*i <= n){if(n%i == 0)
return 0; i++;} return 1;}

ll Npower(ll a,ll b) {ll product = 1; while(b){if(b&1){product = product*a;}a =
a*a;b = b>>1;} return product;} ll power(ll a,ll b,ll md = mod) {ll product = 1;
while(b){if(b&1){product = (product*a)%md;}a = (a*a)%md;b = b>>1;} return
product%md;} ll GCD(ll a,ll b) {return b==0 ? a:GCD(b,a%b);} ll LCM(ll a,ll b)
{return (a/GCD(a,b))*b; }
*/

bool isPossible(ll mid, vl &v, ll k) {

  forn(i, 0, v.sze) {
    k -= ((v[i] - 1) / mid);

    if (k < 0)
      return 0;
  }

  return k >= 0;
}

int main() {
  fast

      /*
          #ifndef ONLINE_JUDGE
              freopen("input.txt",  "r",  stdin);
              freopen("output.txt", "w", stdout);
          #endif
      //*/

      ll n,
      k;
  cin >> n >> k;

  vl v(n);
  ll sum = 0;
  forn(i, 0, n) {
    cin >> v[i];
    sum += v[i];
  }

  ll st = 1, end = 1e15;
  ll ans = 0;
  while (st <= end) {
    ll mid = (st + end) / 2;

    if (isPossible(mid, v, k)) {
      ans = mid;
      end = mid - 1;
    } else {
      st = mid + 1;
    }
  }

  cout << ans;

  return 0;
}

Error: WA

Fixed submission:

/*
मनस्वी म्रियते कामं कार्पण्यं न तु गच्छति ।
अपि निर्वाणमायाति नानलो याति शीतताम् ॥
*/

#include <bits/stdc++.h>
// #include <ext/pb_ds/assoc_container.hpp>
// #include <ext/pb_ds/tree_policy.hpp>
// using namespace __gnu_pbds;
using namespace std;

#define mod 1000000007
#define pb push_back
#define ll long long int
#define ull unsigned ll
#define ld long double
#define vi vector<int>
#define vl vector<ll>
#define v2i vector<vector<int>>
#define v2l vector<vector<ll>>
#define ppi pair<int, int>
#define ppl pair<ll, ll>
#define vpi vector<ppi>
#define vpl vector<ppl>
#define all(x) x.begin(), x.end()
#define ff first
#define ss second
#define forn(i, a, b) for (int i = a; i < b; i++)
#define forr(i, a, b) for (int i = a; i >= b; i--)
#define forv(i, m) for (auto i : m)
#define p2d(v)                                                                 \\
  for (auto a : v) {                                                           \\
    for (auto b : a)                                                           \\
      cout << b << " ";                                                        \\
    cout << endl;                                                              \\
  }
#define p1d(v)                                                                 \\
  for (auto a : v)                                                             \\
    cout << a << " ";                                                          \\
  cout << endl;
#define ppd(v)                                                                 \\
  for (auto a : v)                                                             \\
    cout << a.ff << " " << a.ss << endl;
#define imx INT_MAX
#define imn INT_MIN
#define inf 9000000000000000000
#define minf -inf
#define endl "\\n"
#define fast                                                                   \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(NULL);
#define sze size()
#define rvs reverse
#define itr iterator
#define pre cout << fixed << setprecision(10);
#define umap unordered_map
#define uset unordered_set
#define pi 3.141592653589793
#define MAXN 100005
#define test1(x) cout << #x " = " << x << endl;
#define test2(x, y) cout << #x " = " << x << " " << #y " = " << y << endl;
#define test3(x, y, z)                                                         \\
  cout << #x " = " << x << " " << #y " = " << y << " " << #z " = " << z << endl;
#define test4(w, x, y, z)                                                      \\
  cout << #w " = " << w << " " << #x " = " << x << " " << #y " = " << y << " " \\
       << #z " = " << z << endl;
#define oset                                                                   \\
  tree<ll, null_type, less<ll>, rb_tree_tag, tree_order_statistics_node_update>

/*
const ll infinity = 9e18;

bool compare(ll a,ll b) {return a > b;}
bool compare1(ppl a,ppl b) {return a.ff > b.ff;}
bool compare2(ppl a,ppl b) {return a.ss < b.ss;}
bool isprime(ll n){if(n < 2) return 0; ll i = 2; while(i*i <= n){if(n%i == 0)
return 0; i++;} return 1;}

ll Npower(ll a,ll b) {ll product = 1; while(b){if(b&1){product = product*a;}a =
a*a;b = b>>1;} return product;} ll power(ll a,ll b,ll md = mod) {ll product = 1;
while(b){if(b&1){product = (product*a)%md;}a = (a*a)%md;b = b>>1;} return
product%md;} ll GCD(ll a,ll b) {return b==0 ? a:GCD(b,a%b);} ll LCM(ll a,ll b)
{return (a/GCD(a,b))*b; }
*/

bool isPossible(ll mid, vl &v, ll k) {

  forn(i, 0, v.sze) {
    k -= (v[i] - 1) / mid;

    if (k < 0)
      return 0;
  }

  return k >= 0;
}

int main() {
  fast

      /*
          #ifndef ONLINE_JUDGE
              freopen("input.txt",  "r",  stdin);
              freopen("output.txt", "w", stdout);
          #endif
      //*/

      ll n,
      k;
  cin >> n >> k;

  vl v(n);
  ll sum = 0;
  forn(i, 0, n) {
    cin >> v[i];
    sum += v[i];
  }

  ll st = 0, end = 1e16;
  ll ans = 0;
  while (st <= end) {
    ll mid = (st + end) / 2;

    if (isPossible(mid, v, k)) {
      ans = mid;
      end = mid - 1;
    } else {
      st = mid + 1;
    }
  }

  cout << ans;

  return 0;
}