Cod sursa(job #1424764)

Utilizator GinguIonutGinguIonut GinguIonut Data 25 aprilie 2015 15:00:55
Problema Interclasari Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <fstream>
#define dim 20000001
using namespace std;
ifstream fin("interclasari.in");
ofstream fout("interclasari.out");
int heap[dim],v[dim],i,j,k,f,n,m,ans;
void upDate(int pozi)
{
    while(pozi/2>0)
    {
        if(v[heap[pozi]]<v[heap[pozi/2]])
        {
            swap(heap[pozi],heap[pozi/2]);
            pozi/=2;
        }
        else
            break;
    }
}
void downDate(int pozi)
{
    int po;
    while(pozi*2<=k)
    {
        po=pozi*2;
        if(po+1<=k&&v[heap[po]]>v[heap[po+1]])
            po++;
        if(v[heap[pozi]]>v[heap[po]])
        {
            swap(heap[pozi],heap[po]);
            pozi=po;
        }
        else
            break;
    }
}
int main()
{
    fin>>n;
    for(i=1;i<=n;i++)
    {
        fin>>m;
        ans+=m;
        for(j=1;j<=m;j++)
        {
            fin>>v[++f];
            heap[++k]=f;
            upDate(k);
        }
    }
    fout<<ans<<'\n';
    for(i=1;i<ans;i++)
    {
        fout<<v[heap[1]]<<" ";
        heap[1]=heap[k];
        k--;
        downDate(1);
    }
    fout<<v[heap[1]];
    return 0;
}