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

//
#include <bits/stdc++.h>

using namespace std;

#define PB push_back
#define f first
#define s second
#define what_is(x) cerr << #x << " is " << x << endl;

typedef long long ll;
typedef pair<ll, ll> pll;
typedef pair<int, int> pii;

const ll MOD = 1000000007;
const int N = 200005;
int n, k;

vector<ll> a[2];

int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> k;
  for (int i = 0; i < n; i++) {
    ll x;
    cin >> x;
    a[x < 0].PB(x);
  }
  if (a[0].size())
    sort(a[0].begin(), a[0].end());
  if (a[1].size())
    sort(a[1].begin(), a[1].end());
  int siz0 = a[0].size();
  int siz1 = a[1].size();
  // what_is(siz0);
  // what_is(siz1);
  int ind0 = siz0 - k, ind1 = 0;
  // take all positive
  if (siz0 + siz1 == k) {
    ind0 = 0, ind1 = siz1;
  } else if ((siz1 == 0) ||
             (siz1 > 0 && siz0 >= k && abs(a[1][0]) < a[0][siz0 - k])) {
    ind0 = siz0 - k;
    ind1 = 0;
  } else {
    for (int i = 2; i <= min(k, (int)siz1); i += 2) {
      if (k - i > siz0)
        continue;
      int ind = siz0 - k + i;
      // what_is(i);
      // what_is(ind);
      if (ind <= 1) {
        ind1 = i;
        ind0 = ind;
      }
      int smallest = i - 1;
      if (ind >= 2 && (a[0][ind - 1] * a[0][ind - 2]) <=
                          (a[1][smallest] * a[1][smallest - 1])) {
        ind1 = i;
        ind0 = ind;
      }
    }
    // all negative
  }
  ll ans = 1LL;
  // what_is(ind0);
  // what_is(ind1);
  if (ind0 < 0) {
    if (k % 2 == 1) {
      for (int i = siz1 - k; i < siz1; i++) {
        ans = (ans * (MOD + a[1][i]) % MOD) % MOD;
      }
    } else {
      for (int i = 0; i < k; i++) {
        ans = (ans * (MOD + a[1][i]) % MOD) % MOD;
      }
    }
  } else {
    if (ind0 < siz0) {
      for (int i = ind0; i < siz0; i++) {
        ans = (ans * a[0][i]) % MOD;
      }
    }
    if (ind1 > 0) {
      for (int i = 0; i < ind1; i++) {
        ans = (ans * (MOD + a[1][i]) % MOD) % MOD;
      }
    }
  }
  cout << ans;
  return 0;
}


Error: WA

Fixed submission:

//
#include <bits/stdc++.h>

using namespace std;

#define PB push_back
#define f first
#define s second
#define what_is(x) cerr << #x << " is " << x << endl;

typedef long long ll;
typedef pair<ll, ll> pll;
typedef pair<int, int> pii;

const ll MOD = 1000000007;
const int N = 200005;
int n, k;
vector<ll> a[2];

int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n >> k;
  for (int i = 0; i < n; i++) {
    ll x;
    cin >> x;
    a[x < 0].PB(x);
  }
  if (a[0].size())
    sort(a[0].begin(), a[0].end());
  if (a[1].size())
    sort(a[1].begin(), a[1].end());
  int siz0 = a[0].size();
  int siz1 = a[1].size();
  // what_is(siz0);
  // what_is(siz1);
  int ind0 = siz0 - k, ind1 = 0;
  // take all positive
  if ((siz1 == 0) || (siz1 > 0 && siz0 >= k && abs(a[1][0]) < a[0][siz0 - k])) {
    ind0 = siz0 - k;
    ind1 = 0;
  } else {
    for (int i = 2; i <= min(k, (int)siz1); i += 2) {
      if (k - i > siz0)
        continue;
      int ind = siz0 - k + i;
      // what_is(i);
      // what_is(ind);
      int smallest = i - 1;
      if (ind == 0) {
        ind1 = i;
        ind0 = ind;
      }

      if (ind >= 2 && (a[0][ind - 1] * a[0][ind - 2]) <=
                          (a[1][smallest] * a[1][smallest - 1])) {
        ind1 = i;
        ind0 = ind;
      }
    }
    // all negative
  }
  ll ans = 1LL;
  // what_is(ind0);
  // what_is(ind1);
  if (ind0 < 0) {
    if (k % 2 == 1) {
      for (int i = siz1 - k; i < siz1; i++) {
        ans = (ans * (MOD + a[1][i]) % MOD) % MOD;
      }
    } else {
      for (int i = 0; i < k; i++) {
        ans = (ans * (MOD + a[1][i]) % MOD) % MOD;
      }
    }
  } else {
    for (int i = ind0; i < siz0; i++) {
      ans = (ans * a[0][i]) % MOD;
    }
    for (int i = 0; i < ind1; i++) {
      ans = (ans * (MOD + a[1][i]) % MOD) % MOD;
    }
  }
  cout << ans;
  return 0;
}