#include <bits/stdc++.h>
using namespace std;
using ll = long long;
struct SegmentTree {
  int N;
  vector<int> st;
  SegmentTree(int sz) {
    N = 1;
    while (N < sz) {
      N *= 2;
    }
    st.resize(2 * N, 0);
  };

  void update(int x, int val) {
    x += N;
    st[x] = val;
    for (x /= 2; x > 0; x /= 2) {
      st[x] = st[2 * x + 1] + st[2 * x];
    }
  }

  int query(int l, int r) {
    l += N;
    r += N;
    int sol = 0;
    for (; l < r; l /= 2, r /= 2) {
      if (l & 1) {
        sol += st[l++];
      }
      if (r & 1) {
        sol += st[--r];
      }
    }
    return sol;
  }
};
long long paletta_sort(int N, int V[]) {
  vector<array<int, 2>> Vsorted(N);
  vector<int> even;
  vector<int> odd;
  for (int i = 0; i < N; i++) {
    Vsorted[i] = {V[i], i};
    if (i % 2 == 0)
      even.push_back(V[i]);
    else
      odd.push_back(V[i]);
  }
  sort(Vsorted.begin(), Vsorted.end());

  for (int i = 0; i < N; i++) {
    // devo avere la stessa parita degli indici
    if ((Vsorted[i][1] % 2) != (i % 2))
      return -1;
  }

  ll ans = 0;

  SegmentTree oddst(N);
  SegmentTree evenst(N);

  for (int i = 0; i < odd.size(); i++) {
    oddst.update(odd[i], 1);
    ans += oddst.query(odd[i] + 1, N);
  }
  for (int i = 0; i < even.size(); i++) {
    evenst.update(even[i], 1);
    ans += evenst.query(even[i] + 1, N);
  }

  return ans;
}
