代码
#define maxn 1000006
#include<iostream>
using namespace std;
int n,w[maxn],s[maxn],ans[maxn],cnt;
long long v;
int stk[maxn],tp;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
scanf("%d",&w[i]);
s[i]=w[i]+s[i-1];
}
for(int i=1;i<=n;i++){
if(s[n]-s[i]>=(n-tp-cnt)*w[i]){
ans[cnt]=w[i];
v+=++cnt*w[i];
}
else{
stk[tp]=w[i];
v+=(n-tp++)*w[i];
}
}
cout<<v<<endl;
for(int i=0;i<cnt;i++)
printf("%d ",ans[i]);
while(tp)
printf("%d ",stk[--tp]);
return 0;
}
话说没大样例还不让下测试点就离谱