#include <bits/stdc++.h>
using namespace std;
struct Tree {
  int n;
  vector<vector<int>> v;
  vector<int> a;
  Tree(int n) : n(n), a(n), v(4 * n + 4) {}
  void build(int at, int l, int r) {
    if (l == r) {
      v[at] = {a[l]};
    } else {
      int L = at * 2, R = at * 2 + 1, mid = (l + r) / 2;
      build(L, l, mid);
      build(R, mid + 1, r);
      int ls = v[L].size(), rs = v[R].size();
      v[at] = vector<int>(ls + rs);
      int i = 0, j = 0, k = 0;
      while (i < ls && j < rs) {
        if (v[L][i] < v[R][j]) {
          v[at][k++] = v[L][i];
          i++;
        } else {
          v[at][k++] = v[R][j];
          j++;
        }
      }
      while (i < ls) {
        v[at][k++] = v[L][i];
        i++;
      }
      while (j < rs) {
        v[at][k++] = v[R][j];
        j++;
      }
    }
  }
  int query(int at, int l, int r, int x, int y, int k) {
    if (l == x && r == y) {
      return lower_bound(v[at].begin(), v[at].end(), k) - v[at].begin();
    }
    int ret = 0, mid = (l + r) / 2;
    if (x <= mid) {
      ret += query(at * 2, l, mid, x, min(y, mid), k);
    }
    if (y >= mid + 1) {
      ret += query(at * 2 + 1, mid + 1, r, max(x, mid + 1), y, k);
    }
    return ret;
  }
};
int main() {
  ios::sync_with_stdio(false);
  int n;
  cin >> n;
  Tree T(n);
  for (int& x : T.a) {
    cin >> x;
  }
  T.build(1, 0, n - 1);
  for (int k = 1; k < n; k++) {
    int ans = 0;
    for (int i = 0; k * i + 1 < n; i++) {
      int l = k * i + 1, r = min(k * i + k, n - 1);
      ans += T.query(1, 0, n - 1, l, r, T.a[i]);
    }
    cout << ans;
    if (k + 1 < n)
      cout << ' ';
    else
      cout << endl;
  }
  return 0;
}
