Pagini recente » Cod sursa (job #2000041) | Cod sursa (job #1173348) | Cod sursa (job #2880941) | Cod sursa (job #1609299) | Cod sursa (job #2960703)
#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;
}