Cod sursa(job #2085537)

Utilizator pistvanPeter Istvan pistvan Data 10 decembrie 2017 12:40:47
Problema Subsecventa de suma maxima Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <iostream>
#include <fstream>
#define MaxN 500001
using namespace std;

ifstream f("algsort.in");
ofstream g("algsort.out");

int N, a[MaxN];

void heapify()
{
    if (a[0]==N)
        return;
    a[0]++;
    int i = a[0], f = i/2;
    while (f)
    {
        if (a[f] > a[i])
            swap(a[f], a[i]);
        else
            break;
        i = f;
        f = i/2;
    }
}

int pop_h()
{
    int r=a[1], fi, i = 1;
    swap(a[1], a[a[0]]);
    a[0]--;
    while (2*i<=a[0])
    {
        fi = 2*i;
        if (fi+1<=a[0])
            if (a[fi+1] < a[fi])
                fi++;
        if (a[i] > a[fi])
            swap(a[i], a[fi]);
        else
            break;
        i = fi;
    }
    return r;

}

int main()
{
    f>>N;
    for (int i=1;i<=N;i++)
        f>>a[i];
    a[0] = 1;
    while (a[0]<N)
        heapify();
    for (int i=1;i<=N;i++)
    {
        g<<pop_h()<<' ';
    }
}