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

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> P;
typedef vector<int> VI;

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 (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
#define _overload3(_1, _2, _3, name, ...) name
#define _rep(i, n) repi(i, 0, n)
#define repi(i, a, b) for (int i = int(a); i < int(b); ++i)
#define rep(...) _overload3(__VA_ARGS__, repi, _rep, )(__VA_ARGS__)
#define all(x) (x).begin(), (x).end()

const int mod = 1e9 + 7;

int main() {
  ll n, k;
  cin >> n >> k;
  vector<ll> p, m;
  if (n == k) {
    ll ini = 1;
    rep(i, n) {
      ll d;
      cin >> d;
      if (d < 0) {
        d = d - floor(1.0 * d / mod) * mod;
      }
      ini *= d;
      ini %= mod;
    }
    cout << ini << endl;
    exit(0);
  }
  rep(i, n) {
    ll d;
    cin >> d;
    if (d > 0) {
      p.push_back(d);
    } else {
      m.push_back(d);
    }
  }
  sort(all(p), greater<ll>());
  sort(all(m));
  if (p.size() == 0 && k % 2) {
    sort(all(m), greater<ll>());
    rep(i, k) { m[i] = m[i] - floor(1.0 * m[i] / mod) * mod; }
    ll ini = 1;
    rep(i, k) {
      ini *= m[i];
      ini %= mod;
    }
    ini += mod;
    ini %= mod;
    cout << ini << endl;
    exit(0);
  }
  priority_queue<ll> pq;
  ll ini = 1;
  if (k % 2) {
    ini = p[0];
    p.erase(p.begin());
    k--;
  }
  rep(i, p.size() / 2) { pq.push(p[i * 2] * p[i * 2 + 1]); }
  rep(i, m.size() / 2) { pq.push(m[i * 2] * m[i * 2 + 1]); }
  rep(i, k / 2) {
    ll d = pq.top();
    d %= mod;
    ini *= d;
    ini %= mod;
    pq.pop();
  }
  cout << ini << endl;
}


Error: 0

Fixed submission:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> P;
typedef vector<int> VI;

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 (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
#define _overload3(_1, _2, _3, name, ...) name
#define _rep(i, n) repi(i, 0, n)
#define repi(i, a, b) for (int i = int(a); i < int(b); ++i)
#define rep(...) _overload3(__VA_ARGS__, repi, _rep, )(__VA_ARGS__)
#define all(x) (x).begin(), (x).end()

const int mod = 1e9 + 7;

int main() {
  ll n, k;
  cin >> n >> k;
  vector<ll> p, m;
  if (n == k) {
    ll ini = 1;
    rep(i, n) {
      ll d;
      cin >> d;
      d = d - floor(1.0 * d / mod) * mod;
      ini *= d;
      ini %= d;
    }
    cout << ini << endl;
    exit(0);
  }
  rep(i, n) {
    ll d;
    cin >> d;
    if (d > 0) {
      p.push_back(d);
    } else {
      m.push_back(d);
    }
  }
  sort(all(p), greater<ll>());
  sort(all(m));
  if (p.size() == 0 && k % 2) {
    sort(all(m), greater<ll>());
    rep(i, k) { m[i] = m[i] - floor(1.0 * m[i] / mod) * mod; }
    ll ini = 1;
    rep(i, k) {
      ini *= m[i];
      ini %= mod;
    }
    ini += mod;
    ini %= mod;
    cout << ini << endl;
    exit(0);
  }
  priority_queue<ll> pq;
  ll ini = 1;
  if (k % 2) {
    ini = p[0];
    p.erase(p.begin());
    k--;
  }
  rep(i, p.size() / 2) { pq.push(p[i * 2] * p[i * 2 + 1]); }
  rep(i, m.size() / 2) { pq.push(m[i * 2] * m[i * 2 + 1]); }
  rep(i, k / 2) {
    ll d = pq.top();
    d %= mod;
    ini *= d;
    ini %= mod;
    pq.pop();
  }
  cout << ini << endl;
}