Problem p03244 (C++)

Buggy submission (status: Runtime Error):
#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
int main() {
  ll n;
  cin >> n;
  ll e[n], o[n], k = 0, l = 0;
  for (ll i = 0; i < n; i++) {
    if (i % 2 == 0) {
      cin >> e[k];
      k++;
    } else {
      cin >> o[l];
      l++;
    }
  }
  vector<pair<ll, ll>> ee, oo;
  k = n / 2;
  sort(e, e + k);
  ll c = 1;
  for (ll i = 0; i < k; i++) { // 配列の中身がそれぞれ何個あるかのカウント
    if (e[i] == e[i + 1]) {
      c++;
      if (i == k - 2) { // 122333みたいなときは3のところがansに入らないので
        ee.push_back(make_pair(c, e[i]));
        break;
      }
    } else {
      ee.push_back(make_pair(c, e[i]));
      if (i == k - 2) {
        ee.push_back(
            make_pair(1, e[i + 1])); // 112223とかのときにansに3の分を足すため
        break;
      }
      c = 1;
    }
  }
  sort(o, o + k);
  c = 1;
  for (ll i = 0; i < k; i++) { // 配列の中身がそれぞれ何個あるかのカウント
    if (o[i] == o[i + 1]) {
      c++;
      if (i == k - 2) { // 122333みたいなときは3のところがansに入らないので
        oo.push_back(make_pair(c, o[i]));
        break;
      }
    } else {
      oo.push_back(make_pair(c, o[i]));
      if (i == k - 2) {
        oo.push_back(
            make_pair(1, o[i + 1])); // 112223とかのときにansに3の分を足すため
        break;
      }
      c = 1;
    }
  }
  sort(ee.begin(), ee.end());
  sort(oo.begin(), oo.end());
  ll es = ee.size();
  ll os = oo.size();
  if (es == 1 && os == 1) {
    if (ee[0].second == oo[0].second) {
      cout << k << endl;
      return 0;
    } else {
      cout << 0 << endl;
      return 0;
    }
  }
  if (ee[es - 1].second != oo[os - 1].second) {
    cout << (k - ee[es - 1].first) + (k - oo[es - 1].first) << endl;
    return 0;
  } else {
    if (es == 1) {
      cout << (k - ee[es - 1].first) + (k - oo[os - 2].first) << endl;
      return 0;
    }
    if (os == 1) {
      cout << (k - ee[es - 2].first) + (k - oo[os - 1].first) << endl;
      return 0;
    }
    ll p = (k - ee[es - 1].first) + (k - oo[os - 2].first);
    ll q = (k - ee[es - 2].first) + (k - oo[os - 1].first);
    cout << min(p, q) << endl;
  }
}


Fixed submission:
#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
int main() {
  ll n;
  cin >> n;
  ll e[n], o[n], k = 0, l = 0;
  for (ll i = 0; i < n; i++) {
    if (i % 2 == 0) {
      cin >> e[k];
      k++;
    } else {
      cin >> o[l];
      l++;
    }
  }
  vector<pair<ll, ll>> ee, oo;
  k = n / 2;
  sort(e, e + k);
  ll c = 1;
  for (ll i = 0; i < k; i++) { // 配列の中身がそれぞれ何個あるかのカウント
    if (e[i] == e[i + 1]) {
      c++;
      if (i == k - 2) { // 122333みたいなときは3のところがansに入らないので
        ee.push_back(make_pair(c, e[i]));
        break;
      }
    } else {
      ee.push_back(make_pair(c, e[i]));
      if (i == k - 2) {
        ee.push_back(
            make_pair(1, e[i + 1])); // 112223とかのときにansに3の分を足すため
        break;
      }
      c = 1;
    }
  }
  sort(o, o + k);
  c = 1;
  for (ll i = 0; i < k; i++) { // 配列の中身がそれぞれ何個あるかのカウント
    if (o[i] == o[i + 1]) {
      c++;
      if (i == k - 2) { // 122333みたいなときは3のところがansに入らないので
        oo.push_back(make_pair(c, o[i]));
        break;
      }
    } else {
      oo.push_back(make_pair(c, o[i]));
      if (i == k - 2) {
        oo.push_back(
            make_pair(1, o[i + 1])); // 112223とかのときにansに3の分を足すため
        break;
      }
      c = 1;
    }
  }
  sort(ee.begin(), ee.end());
  sort(oo.begin(), oo.end());
  ll es = ee.size();
  ll os = oo.size();
  if (es == 1 && os == 1) {
    if (ee[0].second == oo[0].second) {
      cout << k << endl;
      return 0;
    } else {
      cout << 0 << endl;
      return 0;
    }
  }
  if (ee[es - 1].second != oo[os - 1].second) {
    cout << (k - ee[es - 1].first) + (k - oo[os - 1].first) << endl;
    return 0;
  } else {
    if (es == 1) {
      cout << (k - ee[es - 1].first) + (k - oo[os - 2].first) << endl;
      return 0;
    }
    if (os == 1) {
      cout << (k - ee[es - 2].first) + (k - oo[os - 1].first) << endl;
      return 0;
    }
    ll p = (k - ee[es - 1].first) + (k - oo[os - 2].first);
    ll q = (k - ee[es - 2].first) + (k - oo[os - 1].first);
    cout << min(p, q) << endl;
  }
}