Problem p04021 (C++)

Buggy submission (status: Runtime Error):
#include <bits/stdc++.h>
using namespace std;
#define all(x) (x).begin(), (x).end()
using ll = long long;
using ld = long double;
#define vl vector<long long>
#define vvl vector<vector<long long>>
#define rep(i, n) for (ll i = 0; i < (ll)(n); i++)
#define rep2(i, s, n) for (ll i = (s); i < (ll)(n); i++)
using pll = pair<long long, long long>;
#define cY cout << "Yes" << endl
#define cN cout << "No" << endl
const long long INF = 1LL << 60;
const long long MOD = 1000000007;
const long double pi = (acos(-1));
#define pb push_back

// 最大最小の入れ替え
template <class T> inline bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
template <class T> inline bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}

// 約数列挙
vector<long long> divisor(long long n) {
  vector<long long> ret;
  for (long long i = 1; i * i <= n; i++) {
    if (n % i == 0) {
      ret.push_back(i);
      if (i * i != n)
        ret.push_back(n / i);
    }
  }
  sort(ret.begin(), ret.end()); // 昇順に並べる
  return ret;
}
// コンビネーション
ll nCr(ll n, ll r) {
  ll ans = 1;
  for (ll i = n; i > n - r; --i) {
    ans = ans * i;
  }
  for (ll i = 1; i < r + 1; ++i) {
    ans = ans / i;
  }
  return ans;
}
// 素因数分解
map<ll, ll> prime_factor(ll n) {
  map<ll, ll> ret;
  for (ll i = 2; i * i <= n; i++) {
    while (n % i == 0) {
      ret[i]++;
      n /= i;
    }
  }
  if (n != 1)
    ret[n] = 1;
  return ret;
}

// 切り上げの割り算は(a + b - 1) / bでできる

// ここから
int main() {
  ll N;
  cin >> N;
  vl even(N / 2);
  vl A(N);
  rep(i, N) {
    cin >> A[i];
    if (i % 2 == 1) {
      even[i / 2] = A[i];
    }
  }
  sort(all(even));
  sort(all(A));
  ll E = 0;
  ll Ans = 0;
  rep(i, N) {
    if (A[i] == even[E]) {
      E++;
      if (i % 2 == 0) {
        Ans++;
      }
    }
  }
  cout << Ans << endl;
}


Fixed submission:
#include <bits/stdc++.h>
using namespace std;
#define all(x) (x).begin(), (x).end()
using ll = long long;
using ld = long double;
#define vl vector<long long>
#define vvl vector<vector<long long>>
#define rep(i, n) for (ll i = 0; i < (ll)(n); i++)
#define rep2(i, s, n) for (ll i = (s); i < (ll)(n); i++)
using pll = pair<long long, long long>;
#define cY cout << "Yes" << endl
#define cN cout << "No" << endl
const long long INF = 1LL << 60;
const long long MOD = 1000000007;
const long double pi = (acos(-1));
#define pb push_back

// 最大最小の入れ替え
template <class T> inline bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
template <class T> inline bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}

// 約数列挙
vector<long long> divisor(long long n) {
  vector<long long> ret;
  for (long long i = 1; i * i <= n; i++) {
    if (n % i == 0) {
      ret.push_back(i);
      if (i * i != n)
        ret.push_back(n / i);
    }
  }
  sort(ret.begin(), ret.end()); // 昇順に並べる
  return ret;
}
// コンビネーション
ll nCr(ll n, ll r) {
  ll ans = 1;
  for (ll i = n; i > n - r; --i) {
    ans = ans * i;
  }
  for (ll i = 1; i < r + 1; ++i) {
    ans = ans / i;
  }
  return ans;
}
// 素因数分解
map<ll, ll> prime_factor(ll n) {
  map<ll, ll> ret;
  for (ll i = 2; i * i <= n; i++) {
    while (n % i == 0) {
      ret[i]++;
      n /= i;
    }
  }
  if (n != 1)
    ret[n] = 1;
  return ret;
}

// 切り上げの割り算は(a + b - 1) / bでできる

// ここから
int main() {
  ll N;
  cin >> N;
  vl even(N / 2);
  vl A(N);
  rep(i, N) {
    cin >> A[i];
    if (i % 2 == 1) {
      even[i / 2] = A[i];
    }
  }
  sort(all(even));
  sort(all(A));
  even.pb(-1);
  ll E = 0;
  ll Ans = 0;
  rep(i, N) {
    if (A[i] == even[E]) {
      E++;
      if (i % 2 == 0) {
        Ans++;
      }
    }
  }
  cout << Ans << endl;
}