#include <bits/stdc++.h>
using namespace std;
int pct(int x) { return __builtin_popcount(x); }
int pct(long long x) { return __builtin_popcountll(x); }
int cdiv(int a, int b) { return a / b + !(a < 0 || a % b == 0); }
long long cdiv(long long a, long long b) {
  return a / b + !(a < 0 || a % b == 0);
}
int nxt_C(int x) {
  int c = x & -x, r = x + c;
  return (((r ^ x) >> 2) / c) | r;
}
long long nxt_C(long long x) {
  long long c = x & -x, r = x + c;
  return (((r ^ x) >> 2) / c) | r;
}
int get_mask(vector<int> v) {
  int mask = 0;
  for (int x : v) {
    mask ^= (1 << x);
  }
  return mask;
}
template <typename T>
void uniq(vector<T> &v) {
  sort(v.begin(), v.end());
  v.resize(unique(v.begin(), v.end()) - v.begin());
}
template <typename T>
void leftShift(vector<T> &v, long long k) {
  k %= (int)v.size();
  if (k < 0) k += (int)v.size();
  rotate(v.begin(), v.begin() + k, v.end());
}
template <typename T>
void rightShift(vector<T> &v, long long k) {
  leftShift(v, (int)v.size() - k);
}
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
long long rand(long long l, long long r) {
  uniform_int_distribution<long long> uid(l, r);
  return uid(rng);
}
void pr() {}
void sc() {}
template <typename Head, typename... Tail>
void pr(Head H, Tail... T) {
  cout << H << " ";
  pr(T...);
}
template <typename Head, typename... Tail>
void sc(Head &H, Tail &...T) {
  cin >> H;
  sc(T...);
}
string to_string(__int128 x) {
  string s = "";
  bool neg = 0;
  if (x < 0) {
    s += "-";
    neg = 1;
    x = -x;
  }
  if (!x) s += '0';
  while (x) {
    int rem = x % 10;
    s += to_string(rem);
    x /= 10;
  }
  reverse(s.begin() + neg, s.end());
  return s;
}
const int mod = 1e9 + 7;
int pwr(int a, int b) {
  int ans = 1;
  while (b) {
    if (b & 1) ans = (ans * 1LL * a) % mod;
    a = (a * 1LL * a) % mod;
    b >>= 1;
  }
  return ans;
}
const int N = 2e5 + 5;
int a[N];
int ans[N];
vector<pair<int, int> > queries[N];
int bit[N];
void upd(int idx, int val) {
  while (idx < N) {
    bit[idx] += val;
    idx += idx & (-idx);
  }
}
int query(int idx) {
  int s = 0;
  while (idx > 0) {
    s += bit[idx];
    idx -= idx & (-idx);
  }
  return s;
}
void solve() {
  int n;
  sc(n);
  vector<int> comp;
  for (int i = 1; i <= n; i++) {
    sc(a[i]);
    comp.push_back(a[i]);
  }
  uniq(comp);
  for (int i = 1; i <= n; i++) {
    a[i] = upper_bound(comp.begin(), comp.end(), a[i]) - comp.begin();
  }
  for (int k = 1; k <= n - 1; k++) {
    for (int i = 2; i <= n; i += k) {
      int l = i, r = min(n, i + k - 1);
      int p = (i + k - 2) / k;
      int val = a[p];
      queries[r].push_back({k, val - 1});
      queries[l - 1].push_back({-k, val - 1});
    }
  }
  for (int i = 1; i <= n; i++) {
    upd(a[i], 1);
    for (pair<int, int> x : queries[i]) {
      int sgn = (x.first > 0) ? 1 : -1;
      x.first = abs(x.first);
      ans[x.first] += sgn * query(x.second);
    }
  }
  for (int k = 1; k <= n - 1; k++) {
    cout << ans[k] << " ";
  }
}
signed main() {
  ios ::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int t = 1;
  for (int tt = 1; tt <= t; tt++) {
    solve();
  }
  return 0;
}
