Brick's Code
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=1e7;
int n;
int a[maxn+5];
namespace A{
int sm,L,mid;
int b[maxn+5];
inline void Work(){
sm=0;for(int i=1;i<=n;i++) sm+=a[i];
L=sm&1;
b[n]=(n*L-sm)/2;
sm=0;for(int i=2;i<=n;i+=2) sm+=L-a[i];
b[n]-=sm;
for(int i=n;i>=2;i--) b[i-1]=L-a[i]-b[i];
mid=n/2+1;
nth_element(b+1,b+mid,b+n+1);
sm=0;for(int i=1;i<=n;i++) sm+=abs(b[i]-b[mid]);
L-=2*b[mid];
printf("%lld %lld",L,sm);
}
}
namespace B{
int L,sm,mid,m;
int b[maxn+5];
int c[maxn+5];
inline void Work(){
L=0;
for(int i=1;i<=n;i+=2) sm+=a[i];
for(int i=2;i<=n;i+=2) sm-=a[i];
if(sm!=0) puts("-1 -1");
else{
b[n]=0;for(int i=n;i>=2;i--) b[i-1]=L-a[i]-b[i];
for(int i=1;i<=n;i+=2) c[i/2+1]=b[i];
for(int i=2;i<=n;i+=2) b[i/2]=b[i];
m=n/2,mid=m/2+1,sm=0;
nth_element(b+1,b+mid,b+m+1);
for(int i=1;i<=m;i++) sm+=abs(b[i]-b[mid]);
nth_element(c+1,c+mid,c+m+1);
for(int i=1;i<=m;i++) sm+=abs(c[i]-c[mid]);
L=-b[mid]-c[mid];
printf("%lld %lld",L,sm);
}
}
}
signed main(){
scanf("%lld",&n);
for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
if(n&1) A::Work();
else B::Work();
return 0;
}