#include <bits/stdc++.h>
using namespace std;
int AIB[200005];
vector<pair<int, int> > inter[200005];
int v[200005], n, cnt[200005];
int indice[200005];
void update(int poz) {
  for (; poz <= n; poz += (poz ^ (poz - 1) & poz)) AIB[poz]++;
}
int query(int poz) {
  if (poz == 0) return 0;
  int s = 0;
  for (; poz; poz -= (poz ^ (poz - 1) & poz)) s += AIB[poz];
  return s;
}
inline int cmp(const int& a, const int& b) {
  if (v[a] == v[b]) return a < b;
  return v[a] < v[b];
}
int main() {
  int i, j, a, b, poz, lim;
  pair<int, int> p;
  scanf("%d", &n);
  for (i = 1; i <= n; i++) scanf("%d", &v[i]);
  for (i = 1; i < n; i++) {
    for (j = 1; 1; j++) {
      a = 2 + (j - 1) * i;
      b = 1 + j * i;
      if (a > n) break;
      inter[j].push_back(make_pair(a, b));
    }
  }
  for (i = 1; i <= n; i++) indice[i] = i;
  sort(indice + 1, indice + n + 1, cmp);
  for (i = 1; i <= n; i++) {
    poz = indice[i];
    lim = inter[poz].size();
    for (j = 0; j < lim; j++) {
      p = inter[poz][j];
      int val = (query(min(p.second, n)) - query(p.first - 1));
      cnt[p.second - p.first + 1] += val;
    }
    update(poz);
  }
  for (i = 1; i < n; i++) printf("%d ", cnt[i]);
  printf("\n");
  return 0;
}
