#include <bits/stdc++.h>
using namespace std;
inline int in() {
  int x;
  scanf("%d", &x);
  return x;
}
inline void priv(vector<int>& a) {
  for (int i = 0; i < (int)(a).size(); ++i)
    printf("%d%c", a[i], i == (int)(a).size() - 1 ? '\n' : ' ');
}
const int MX = 200005, INF = 1000010000;
const long long int LINF = 1000000000000000000ll;
const double eps = 1e-10;
const int di[] = {-1, 0, 1, 0}, dj[] = {0, -1, 0, 1};
struct seg {
  vector<vector<int> > d;
  int x2;
  seg() {}
  seg(int mx) {
    x2 = 1;
    while (x2 < mx) x2 <<= 1;
    d.resize(x2 << 1);
  }
  void fil() {
    for (int i = x2 - 1; i >= 0; --i) {
      d[i] = d[i << 1];
      d[i].insert(d[i].end(), d[i << 1 | 1].begin(), d[i << 1 | 1].end());
      sort(d[i].begin(), d[i].end());
    }
  }
  int qu(int a, int b, int x, int i = 1, int l = 0, int r = -1) {
    if (r == -1) r = x2;
    if (a <= l && r <= b) {
      return lower_bound(d[i].begin(), d[i].end(), x) - d[i].begin();
    }
    int c = (l + r) >> 1;
    int res = 0;
    if (a < c) res += qu(a, b, x, i << 1, l, c);
    if (c < b) res += qu(a, b, x, i << 1 | 1, c, r);
    return res;
  }
};
int a[MX];
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 0; i < n; ++i) scanf("%d", &a[i]);
  seg t(n + 2);
  for (int i = 0; i < n; ++i) t.d[t.x2 + i] = vector<int>(1, a[i]);
  t.fil();
  vector<int> as;
  for (int k = 1; k <= n - 1; ++k) {
    int ans = 0;
    for (int i = 0; i < n; ++i) {
      int l = i * k + 1, r = l + k;
      if (l >= n) break;
      r = min(r, n);
      ans += t.qu(l, r, a[i]);
    }
    as.push_back(ans);
  }
  priv(as);
  return 0;
}
