您的位置:首页 > 其它

【堆排】合并果子

2014-03-12 17:00 127 查看
#include<cstdio>
#define maxlongint 2147483647
long n,a[10001],ans,i,k;

void Adjustheap(long s)
{
long j=0,tmp;
while (j!=maxlongint){
tmp=a[s]; j=maxlongint;
if (s*2<=n && a[s*2]<tmp){
tmp=a[s*2]; j=s*2;
}
if (s*2+1<=n && a[s*2+1]<tmp){
tmp=a[s*2+1]; j=s*2+1;
}
if (j!=maxlongint) {
long k=a[s]; a[s]=tmp; a[j]=k; s=j;
}
}
}

void Buildheap(){
for (i=n>>1;i;i--) Adjustheap(i);
}
int main()
{
freopen("fruit.in","r",stdin);
freopen("fruit.out","w",stdout);
scanf("%ld",&n);
for (i=1;i<=n;i++) scanf("%ld",&a[i]);
Buildheap();
while (n>1){
k=0;
k+=a[1]; a[1]=a
; n--; Adjustheap(1);
k+=a[1]; a[1]=k;  Adjustheap(1);
ans+=k;
}
printf("%ld\n",ans);
//  getchar(); getchar();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: