|
- #include <cstdio>
- #include <algorithm>
- using namespace std;
- int n,h[100000];
- void swap(int r,int f)
- {
- int t;
- t=h[r];
- h[r]=h[f];
- h[f]=t;
- return;
- }
- void siftdown()
- {
- int t,flag=0,i=1;
- while(i*2<=n && flag==0)
- {
- if(h[i]>h[i*2])
- t=i*2;
- else
- t=i;
- if(i*2+1<=n)
- if(h[t]>h[i*2+1])
- t=i*2+1;
- if(t!=i)
- {
- swap(t,i);
- i=t;
- }
- else
- flag=1;
- }
- return;
- }
- int main()
- {
- int u;
- int sum=0;
- int x,y;
- scanf("%d",&n);
- for(int i=1;i<=n;i++)
- scanf("%d",&h[i]);
- sort(h+1,h+n+1);
- u=n;
- for(int i=1;i<=u-1;i++)
- {
- x=h[1];
- h[1]=h[n];
- h[n]=0;
- n--;
- siftdown();
- y=h[1];
- h[1]=x+y;
- siftdown();
- sum=sum+x+y;
- }
- printf("%d",sum);
- return 0;
- }
复制代码 |
|