#include<stdio.h>
#include<ctype.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>
int n;
long long s[100000];
long long sum;
void BUILD_SMALLHEAP(long long[]);
void MAKE_UP(int);
int main()
{
int i,end;
long long a1,a2;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%lld",&s[i]);
}
BUILD_SMALLHEAP(s);
end = n;
for(i=1;i<=(end-1);i++)
{
a1 = s[1];
s[1] = s[n];
n--;
MAKE_UP(1);
a2 = s[1];
sum += a1+a2;
s[1] = sum;
MAKE_UP(1);
}
printf("%lld",sum);
return 0;
}
void BUILD_SMALLHEAP(long long h[])
{
int t=n/2,i;
for(i=t;i>=1;i--)
{
MAKE_UP(i);
}
return;
}
void MAKE_UP(int a)
{
int i=a,num;
long long t;
while(i<=n/2)
{
if((2*i+1)<=n)
{
if(s[2*i]<s[2*i+1])
num = 2*i;
else
num = 2*i+1;
}
else
num = 2*i;
if(s[i]>s[num])
{
t = s[num];
s[num] = s[i];
s[i] = t;
i = num;
continue;
}
else
break;
}
return;
}
De了一下午还没发现错误,求教大佬!