Cod sursa(job #2960703)

Utilizator user12345user user user user12345 Data 4 ianuarie 2023 20:43:30
Problema Interclasari Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.76 kb
#include<bits/stdc++.h>
using namespace std;

ifstream fin("interclasari.in");
ofstream fout("interclasari.out");

class heap {

private:

    struct nod {
        int val;
        nod* down, * next;

        nod()
        {
            val = 0;
            down = next = NULL;
        }

        nod(int val)
        {
            this->val = val;
            down = next = NULL;
        }
    }*root;

    nod* unit(nod* a, nod* b)
    {
        if (a == NULL && b == NULL)
            return NULL;

        if (a == NULL)
            return b;

        if (b == NULL)
            return a;

        if (a->val > b->val)
            swap(a, b);

        // a->val <= b->val

        b->next = a->down;
        a->down = b;

        return a;
    }

    nod* convert(nod* a)
    {
        if (a == NULL)
            return NULL;

        nod* next = a->next;

        if (next == NULL)
            return a;

        return unit(unit(a, next), convert(next->next));
    }

public:

    heap()
    {
        root = NULL;
    }

    bool empty()
    {
        return root == NULL;
    }

    void add(int x)
    {
        root = unit(root, new nod(x));
    }

    int top()
    {
        return root->val;
    }

    void pop()
    {
        root = convert(root->down);
    }
};

int k;
heap H;

int main()
{
    fin >> k;
    int nr = 0;

    for (int i = 1; i <= k; i++)
    {
        int n;
        fin >> n;
        nr += n;

        for (int j = 1; j <= n; j++)
        {
            int x;
            fin >> x;
            H.add(x);
        }
    }

    fout << nr << '\n';

    while (!H.empty())
    {
        fout << H.top() << ' ';
        H.pop();
    }
    
    return 0;
}