#include <bits/stdc++.h>
#define FOR(i,l,r) for(int i = l ; i <= r ; i ++)
#define FORD(i,r,l) for(int i = r ; i >= l ; i --)
#define REP(i, a ) for(int i = 0 ; i < a ; i ++ )
#define compare(v) sort((v).begin(), (v).end()); (v).erase(unique((v).begin(), (v).end()), (v).end());
#define ll long long
#define el "\n"
#define fi first
#define se second
#define _ROOT_ int main()
#define M 1000000007
#define MAXN 1000001
#define INF (1ll<<30)
#define NAME "file"
using namespace std;

ll n, m, q, ans ;
ll a[MAXN] ;
ll lab[MAXN ] ;
ll res[MAXN ] ;
vector<ll> p[MAXN ] ;
bool active[MAXN ] ;

ll calc(ll a ) {
    return a * (a + 1 ) / 2 ;
}

ll find_set(ll a ) {
    return lab[a] < 0 ? a : lab[a] = find_set(lab[a] ) ;
}

bool union_set(ll a, ll b ) {
    if(active[a] == false ) return false ;
    if(active[b] == false ) return false ;
    a = find_set(a) ;
    b = find_set(b) ;
    if(a == b ) return false ;
    if(lab[a] > lab[b] ) swap(a, b ) ;
    ans -= calc(-lab[a]) ;
    ans -= calc(-lab[b]) ;
    lab[a] += lab[b] ;
    ans += calc(-lab[a]) ;
    lab[b] = a ;
    return true ;
}

void init() {
    cin >> n ;
    FOR(i, 1, n ) cin >> a[i] ;
    ans = 0 ;
}

void solve() {
    n -- ;
    FOR(i, 1, n ) a[i] = abs(a[i] - a[i + 1] ) ;
    FOR(i, 1, n ) lab[i] = - 1 ;
    FOR(i, 1, n ) p[a[i]].push_back(i) ;
    FORD(i, n, 1 ) {
        for(ll v : p[i]) {
            active[v] = true ;
            ans ++ ;
            union_set(v + 1, v ) ;
            union_set(v, v - 1 ) ;
        }
        res[i] = ans ;
    }
    FOR(i, 1, n ) cout << res[i] << " " ;
    cout << el ;
    FOR(i, 1, n ) p[i].clear(), active[i] = false ;
}

_ROOT_ {
    // freopen(NAME".inp" , "r" , stdin);
    // freopen(NAME".out" , "w", stdout) ;
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int t = 1;
   // cin >> t ;
    while(t--) {
        init();
        solve();
    }
    return (0&0);
}
