#include <bits/stdc++.h>
using namespace std;
const long long INF = (long long)1e9 + 5;
const long long MOD = (long long)1e9 + 7;
const int MAXN = 200005;
struct BIT {
  long long c[MAXN];
  void init(int n) { fill(c, c + n + 1, 0); }
  void add(int p, long long v) {
    while (p < MAXN) {
      c[p] += v;
      p += p & -p;
    }
  }
  long long get(int p) {
    long long res = 0;
    while (p) {
      res += c[p];
      p -= p & -p;
    }
    return res;
  }
  long long RSQ(int l, int r) {
    if (l > r) return 0;
    return get(r) - get(l - 1);
  }
} tree1, tree2;
int n, a[MAXN], pos[MAXN];
int main() {
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    pos[a[i]] = i;
  }
  long long ans = 0;
  long long c1 = 0, c2 = 0;
  set<int> ord;
  auto mid = ord.begin();
  for (int i = 1; i <= n; i++) {
    int p = pos[i];
    ans += tree1.RSQ(p, n);
    tree1.add(p, 1);
    tree2.add(p, p);
    ord.insert(p);
    if (i == 1) {
      mid = ord.begin();
    } else {
      if (p < *mid)
        c1++;
      else
        c2++;
      if (ord.size() % 2) {
        while (c2 > c1) {
          ++mid;
          c1++;
          c2--;
        }
        while (c2 < c1) {
          --mid;
          c2++;
          c1--;
        }
      }
    }
    long long add1 =
        -tree2.RSQ(1, *mid - 1) + tree2.RSQ(*mid + 1, n) + *mid * (c1 - c2);
    long long add2 = -c2 * (c2 + 1) / 2 - c1 * (c1 + 1) / 2;
    cout << ans + add1 + add2 << " \n"[i == n];
  }
  return 0;
}
