heap

#include<bits/stdc++.h>
using namespace std;
int head_size,n;
int heap[601000];
void put(int d)
{
    int now,next;
    heap[++head_size]=d;
    now=head_size;
    while(now>1)
    {
        next=now>>1;
        if(heap[now]>=heap[next])return ;
        swap(heap[now],heap[next]);
        now=next;
    }
}
int  get ()
{
    int now,next,res;
    res=heap[1];
    heap[1]=heap[head_size--];
    now=1;
    while(now*2<=head_size)
    {
        next=now*2;
        if(next<head_size&&heap[next+1]<heap[next])
            next++;
        if(heap[now]<heap[next])return res;
        swap(heap[now],heap[next]);
        now=next;
    }
    return res;
}
void work()
{
    int x,y,ans= 0 ;
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%d",&x);
        put(x);
    }
    for(int i=1;i<n;i++){
        x=get();
        y=get();
        years +=x+ y;
        put(x+y);
    }
    printf("%d\n",ans);
}
intmain ()
{
    work();
    return 0;
}
View Code

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325737378&siteId=291194637