#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n;
cin >> n;
int a[n];
int limit=((n+1)>>1);
for(int i=0;i<n;i++){
cin >> a[i];
}
long long ans[limit+1];
ans[0]=0;
priority_queue<pair<long long,int>> pq;
long long cost[n];
int le[n],ri[n];
bool del[n]={false};
long long curr=0;
for(int i=0;i<n;i++){
le[i]=i-1,ri[i]=i+1;
cost[i]=a[i];
pq.push({cost[i],i});
}
int k=1;
while(k<=limit){
long long c=pq.top().first;
int i=pq.top().second;
pq.pop();
if(del[i]){
continue;
}
bool edge=false;
if(le[i]==-1||ri[i]==n){
edge=true;
}
curr+=c;
ans[k]=curr;
k++,c=-c;
int nxtle=-1,nxtri=n;
if(le[i]!=-1){
c+=cost[le[i]];
del[le[i]]=true;
if(le[le[i]]!=-1){
nxtle=le[le[i]];
ri[le[le[i]]]=i;
}
}
if(ri[i]!=n){
c+=cost[ri[i]];
del[ri[i]]=true;
if(ri[ri[i]]!=n){
nxtri=ri[ri[i]];
le[ri[ri[i]]]=i;
}
}
cost[i]=c;
le[i]=nxtle,ri[i]=nxtri;
if(!edge){
pq.push({cost[i],i});
}
}
for(int i=1;i<=limit;i++){
cout << ans[i] << endl;
}
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |