#include using namespace std; typedef long long ll; typedef long double ld; typedef pair PP; // #define MOD 1000000007 #define MOD 998244353 #define INF 2305843009213693951 #define PI 3.141592653589 #define setdouble setprecision #define REP(i,n) for(ll i=0;i<(n);++i) #define OREP(i,n) for(ll i=1;i<=(n);++i) #define RREP(i,n) for(ll i=(n)-1;i>=0;--i) #define ORREP(i,n) for(ll i=(n);i>=1;--i) #define rep(i,a,b) for(ll i=(a);i<=(b);++i) #define ALL(v) (v).begin(), (v).end() #define chmin(k,m) k = min(k,m) #define chmax(k,m) k = max(k,m) #define GOODBYE do { cout << "-1" << endl; return 0; } while (false) #define MM <<" "<< #define Endl endl class compress{ // Copyright (c) 2023 0214sh7 // https://github.com/0214sh7/library/ private: std::vector E; public: void init(std::vector A){ E.clear(); sort(A.begin(),A.end()); for(int i=0;i A){ init(A); } int size(){ return (int)E.size(); } int value(int x){ if(0<=x && x<(int)E.size()){ return E[x]; }else{ return 0; } } int index(int X){ return (upper_bound(E.begin(),E.end(),X))-E.begin()-1; } }; template class lazysegmenttree{ /* Copyright (c) 2024 0214sh7 https://github.com/0214sh7/library/ */ //private: public: int n,height; std::vector dat; std::vector lazy; std::vector lazy_flag; std::function calc; T identity; std::function action; std::function composition; F action_identity; void eval(int k){ if(!lazy_flag[k])return; if(k func,T Identity, std::function Action,std::function Composition, F Action_identity){ n=1;height=1; while(n func,T Identity, std::function Action,std::function Composition,F Action_identity){ init(N,func,Identity,Action,Composition,Action_identity); } void set(std::vector A){ if(n<(int)A.size()){ n=1;height=1; while(n<(int)A.size()){n*=2;height++;}; dat.resize(2*n-1); lazy.resize(2*n-1); lazy_flag.resize(2*n-1); } for(int i=0;i<2*n-1;++i){ dat[i]=identity; lazy[i]=action_identity; lazy_flag[i]=false; } for(unsigned i=0;i=0;i--){ dat[i] = calc(dat[2*i+1],dat[2*i+2]); } } void update(int a,int b,F f){ a+=n-1; b+=n-1; for(int i=height-1;i>=0;i--){ if(((a+1)>>i)>0){ eval(((a+1)>>i)-1); } if((b>>i)>0){ eval((b>>i)-1); } } int l = a,r = b-1; while(a < b){ if(a % 2 == 0){ lazy[a] = composition(f,lazy[a]); lazy_flag[a] = true; a++; } a = (a-1)/2; if(b % 2 == 0){ b--; lazy[b] = composition(f,lazy[b]); lazy_flag[b] = true; } b = (b-1)/2; } while(l>0){ l = (l-1)/2; eval(2*l+1);eval(2*l+2); dat[l] = calc(dat[2*l+1],dat[2*l+2]); } while(r>0){ r = (r-1)/2; eval(2*r+1);eval(2*r+2); dat[r] = calc(dat[2*r+1],dat[2*r+2]); } } T query(int a,int b){ a+=n-1; b+=n-1; for(int i=height-1;i>=0;i--){ if(((a+1)>>i)>0){ eval(((a+1)>>i)-1); } if((b>>i)>0){ eval((b>>i)-1); } } T L= identity,R = identity; while(a < b){ if(a % 2 == 0){ eval(a); L = calc(L,dat[a]); a++; } a = (a-1)/2; if(b % 2 == 0){ b--; eval(b); R = calc(dat[b],R); } b = (b-1)/2; } R = calc(L,R); return R; } }; int main(void){ //cin.tie(nullptr); //ios::sync_with_stdio(false); ll N; cin >> N; vector H(N); REP(i,N){ cin >> H[i]; } compress Z(H); vector Hs = H; sort(ALL(Hs)); RREP(i,N-1){ Hs[i+1]-=Hs[i]; } // 使う和、真の和 typedef std::pair P; std::function func = [](P a,P b){ return P{a.first+b.first,a.second+b.second}; }; std::function action = [](long long f,P x){ return P{f*x.second,x.second}; }; std::function composition = [](long long f,long long g){ return f; }; lazysegmenttree SEG(N,func,{0,0},action,composition,0); vector> Sg(N); REP(i,N){ Sg[i] = {0,Hs[i]}; } SEG.set(Sg); REP(i,N){ ll ind = Z.index(H[i]); SEG.update(0,ind+1,(i+1)%2); ll Ans = SEG.query(0,N).first; cout << Ans << endl; // REP(j,N){ // auto p = SEG.query(j,j+1); // cout << p.first MM p.second << " "; // }cout << endl; } return 0; }