#include using namespace std; #include // 可変引数repマクロ https://trap.jp/post/1224/ #define rep1(a) for (long long i = 0; i < (long long)a; i++) #define rep2(i, a) for (long long i = 0; i < (long long)a; i++) #define rep3(i, a, b) for (long long i = (long long)a; i <= (long long)b; i++) #define rep4(i, a, b, c) for (long long i = (long long)a; i <= (long long)b; i += (long long)c) #define overload4(a, b, c, d, e, ...) e #define rep(...) overload4(__VA_ARGS__, rep4, rep3, rep2, rep1)(__VA_ARGS__) #define printYesNo(is_ok) puts(is_ok ? "Possible" : "Impossible") #define ALL(v) v.begin(), v.end() #define RALL(v) v.rbegin(), v.rend() #define SORT(v) sort(ALL(v)) #define RSORT(v) sort(RALL(v)) #define REVERSE(v) reverse(ALL(v)) template using pq_asc = priority_queue, greater>; template using pq_des = priority_queue; template void printlnVector(T v) { for (auto n : v) { cout << n << endl; } } template void printVector(T v) { for (auto n : v) { cout << n << " "; } cout << endl; } using S = pair; S op(S a, S b) { return pair(a.first + b.first, a.second + b.second); } S e() { return pair(0, 0); } using F = long long; F id() { return LONG_LONG_MIN; } S mapping(F f, S x) { return f == id() ? x : pair(f * x.second, x.second); } F composition(F f, F g) { return f == id() ? g : f; } int main() { int N; cin >> N; vector H(N); set st = {0}; rep(i, N) { cin >> H[i]; st.insert(H[i]); } map mp; for (auto n : st) { mp[n] = mp.size(); } atcoder::lazy_segtree seg(mp.size()); vector temp_h(st.begin(), st.end()); rep(i, temp_h.size() - 1) { seg.set(i, S(0, temp_h[i + 1] - temp_h[i])); } rep(i, N) { int h_i = mp[H[i]]; seg.apply(0, h_i, i % 2 == 0); auto ans = seg.all_prod(); cout << ans.first << endl; } return 0; }