Pagini recente » Cod sursa (job #663810) | Cod sursa (job #718882) | Cod sursa (job #590793) | Cod sursa (job #2490658) | Cod sursa (job #1814296)
#include <cstdio>
using namespace std;
int n, m, L, Heap[20000005];
inline void push(int x){
while(x / 2 && Heap[x] < Heap[x / 2]){
int aux = Heap[x];
Heap[x] = Heap[x / 2];
Heap[x / 2] = aux;
x /= 2;
}
}
inline void pop(){
Heap[1] = Heap[L];
--L;
int x = 1, y;
while(x <= L && Heap[x] > Heap[x * 2]){
if(Heap[x * 2] < Heap[x * 2 + 1])
y = x * 2;
else
y = x * 2 + 1;
if(y > L) return ;
int aux = Heap[y];
Heap[y] = Heap[x];
Heap[x] = aux;
x = y;
}
}
int main()
{
freopen("interclasari.in", "r", stdin);
freopen("interclasari.out", "w", stdout);
scanf("%d", &n);
int x;
for(int i = 1; i <= n ; ++i){
scanf("%d", &m);
for(int j = 1; j <= m ; ++j){
scanf("%d", &x);
++L;
Heap[L] = x;
push(L);
}
}
printf("%d\n", L);
while(L > 0){
printf("%d ", Heap[1]);
pop();
}
return 0;
}