#include using namespace std; #define rep(i,n) for (int i = 0; i< (n); ++i) #define repi(i, a, b) for (int i = (a); i < (b); ++i) #define all(x) (x).begin(), (x).end() #define fore(i, a) for(auto &i:a) using ll = long long; #include using namespace atcoder; struct S{ ll value; ll size; }; struct F{ ll value; bool flag; }; S op(S l, S r){ return S{l.value+r.value, l.size+r.size}; } S e(){ return S{0,0}; } S mapping(F f, S x){ if(f.flag){ return S{f.value*x.size, x.size}; } else{ return x; } } F composition(F f, F g){ if(f.flag){ return f; } else{ return g; } } F id(){ return F{0,false}; } template struct CC { bool initialized; vector xs; CC(): initialized(false) {} void add(T x) { xs.push_back(x);} void init() { sort(xs.begin(), xs.end()); xs.erase(unique(xs.begin(),xs.end()),xs.end()); initialized = true; } int operator()(T x) { if (!initialized) init(); return upper_bound(xs.begin(), xs.end(), x) - xs.begin() - 1; } T operator[](int i) { if (!initialized) init(); return xs[i]; } int size() { if (!initialized) init(); return xs.size(); } }; int main() { ll n; cin >> n; CC cc; vector vec(n); vector H(n); rep(i, n){ ll h; cin >> h; H[i] = h; cc.add(h); }; cc.add(0); rep(i, n){ vec[i] = {0, cc[i+1]-cc[i]}; } lazy_segtree seg(vec); rep(i, n){ seg.apply(0, cc(H[i]), {(i+1)%2, true}); cout << seg.all_prod().value << endl; } }