//void __(){
//    _(int,n);
//    _(vi,a,n);
//    vpii b;
//    rep(i,n)
//        b.pb({a[i],i});
//    b.pb({0,-1});
//    sort(rall(b));
//    int smallest_index = n-1;
//    ll last_h = b[0].X;
//    vl ans(n);
//    rep(i,n+1){
//        ans[smallest_index] += (last_h-b[i].X)*i;
//        last_h = b[i].X;
//        smallest_index = min(smallest_index,b[i].Y);
//    }
//    print_vn ans;
//}
//
#include <iomanip>
#include <algorithm>
#include <cassert>
#include <vector>
#include <utility>
#include <iostream>
#include <string>
#define pb push_back
#define REP_ZERO_INT(i,r) for(int i = 0; i < r; ++i)
#define GET_REP_MACRO(_1,_2,_3,_4,NAME,...) NAME
#define rep(...) GET_REP_MACRO(__VA_ARGS__,REP_ANY,REP_INT,REP_ZERO_INT)(__VA_ARGS__)
#define all(v) (v).begin(), (v).end()
#define rall(v) (v).rbegin(), (v).rend()
#define sz(v) ll(v.size())
#define X first
#define Y second
#define T1 template<typename T> static
using namespace std;
typedef long long ll;
typedef vector<ll> vl;
typedef vector<int> vi;
typedef pair<int, int> pii;
typedef vector<pii> vpii;
T1 ostream& operator<<(ostream& stream, const vector<T>& t);
T1 istream& read(T, T, istream& = cin);
T1 istream& operator>>(istream& stream, vector<T>& t){
    return read(all(t), stream);
}
T1 istream& read(T b, T e, istream& stream){
    for(T it = b; it != e; ++it)
        stream >> *it;
    return stream;
}
struct _print {
    string sep,end;
    bool space;
    ostream &stream;
    _print(string _sep=" ",string _end="\n",
            ostream &_stream = cout)
        : sep(_sep),end(_end),space(false),
            stream(_stream) {}
    ~_print() { stream << end; }
    template <typename T>
        _print &operator , (const T &t) {
            if (space) stream << sep;
            space = true;
            stream << t;
            return *this;
        }
};
struct _print2{
    string s1,s2,end;
    bool space;
    ostream &stream;
    _print2(string _s1 = " ", string _s2 = " ", string _end="\n", ostream &_stream = cout)
        :s1(_s1),s2(_s2),end(_end),space(false),
        stream(_stream) {}
    ~_print2() { stream << end; }
    template <typename T>
        _print2 &operator , (const T &t) {
            for(auto _ : t){
                if (space) stream << s1;
                space = true;
                _print p(s2,"",stream);
                    p,_;
            }
            return *this;
        }
};
#define print_vn _print2("\n"," ","\n"),
#define INPUT_WITHOUT_INIT(type,name) type name; cin >> name
#define _IWI(type,name,...) type name(__VA_ARGS__); cin >> name
#define GET_INPUT_MACRO(_1,_2,_3,_4,_5,_6,_7,_8,NAME,...) NAME
#define _(...) GET_INPUT_MACRO(__VA_ARGS__,_IWI,_IWI,_IWI,_IWI,_IWI,_IWI,INPUT_WITHOUT_INIT)(__VA_ARGS__)
void __(){
    _(int,n);
    _(vi,a,n);
    vpii b;
    rep(i,n)
        b.pb({a[i],i});
    b.pb({0,-1});
    sort(rall(b));
    int smallest_index = n-1;
    ll last_h = b[0].X;
    vl ans(n);
    rep(i,n+1){
        ans[smallest_index] += (last_h-b[i].X)*i;
        last_h = b[i].X;
        smallest_index = min(smallest_index,b[i].Y);
    }
    print_vn ans;
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cout << fixed << setprecision(15);
        __();
}


Measured memory_bytes: 3188