#include <bits/stdc++.h>
const long double eps = 1e-9;
using namespace std;
template <class T>
inline T MAX(const T &_a, const T &_b) {
  return ((_a > _b) ? _a : _b);
}
template <class T>
inline T MIN(const T &_a, const T &_b) {
  return ((_a < _b) ? _a : _b);
}
template <class T>
inline T MAX3(const T &_a, const T &_b, const T &_c) {
  return MAX(MAX(_a, _b), _c);
}
template <class T>
inline T MIN3(const T &_a, const T &_b, const T &_c) {
  return MIN(MIN(_a, _b), _c);
}
template <class T>
inline T MAX4(const T &_a, const T &_b, const T &_c, const T &_d) {
  return MAX(MAX3(_a, _b, _c), _d);
}
template <class T>
inline T MIN4(const T &_a, const T &_b, const T &_c, const T &_d) {
  return MIN(MIN3(_a, _b, _c), _d);
}
template <class T>
inline T ABS(const T &_a) {
  return ((_a < 0) ? -_a : _a);
}
template <class T>
inline T SQR(const T &_a) {
  return _a * _a;
}
template <class T>
inline T gcd(T _a, T _b) {
  for (T _r; (_r = _a % _b); _b = _r) _a = _b;
  return _b;
}
template <class T>
inline T lcm(const T &_a, const T &_b) {
  return (_a / gcd(_a, _b)) * _b;
}
template <class T>
inline bool BETW(const T &_a, const T &_b, const T &_c) {
  return (_a >= MIN(_b, _c) && _a <= MAX(_b, _c));
}
template <class T>
inline bool EXT(const T &_a, const T &_b, const T &_c) {
  return !BETW(_a, _b, _c);
}
const int MAXN = 200010;
int N, a[MAXN];
int ft[MAXN], res[MAXN];
pair<int, int> b[MAXN];
inline void update(int x) {
  for (; x < MAXN; x += (x & -x)) ft[x]++;
}
inline int query(int x) {
  int sum = 0LL;
  for (; x; x -= (x & -x)) sum += ft[x];
  return sum;
}
int main() {
  int i, j, k, t;
  scanf("%d", &N);
  for (i = 1; i <= N; i++) {
    scanf("%d", a + i);
    b[i] = make_pair(a[i], i);
  }
  sort(b + 1, b + N + 1);
  for (i = 1, j = 2; i <= N; i = j, j++) {
    while (j <= N && b[j].first == b[i].first) j++;
    for (t = i; t < j; t++) {
      if (b[t].second == 1) {
        for (k = 1; k * b[t].second + 1 <= N; k++)
          res[k] +=
              (query(k * b[t].second + 1) - query(k * (b[t].second - 1) + 1));
        res[k] += (query(N) - query(k * (b[t].second - 1) + 1));
      } else {
        for (k = 1; k * (b[t].second - 1) + 2 <= N; k++)
          res[k] += (query(min(N, k * b[t].second + 1)) -
                     query(k * (b[t].second - 1) + 1));
      }
    }
    for (t = i; t < j; t++) update(b[t].second);
  }
  for (i = 1; i < N; i++) printf("%d ", res[i]);
  return 0;
}
