Pagini recente » Cod sursa (job #1932594) | Cod sursa (job #600136) | Cod sursa (job #204286) | Cod sursa (job #1205305) | Cod sursa (job #1261816)
#include <stdio.h>
#define MAXN 4000000
int v[MAXN], n;
inline int tata(int a){
return (a-1)/2;
}
inline int fiust(int a){
return a*2+1;
}
inline int fiudr(int a){
return a*2+2;
}
inline void swap(int a, int b){
int aux=v[a];
v[a]=v[b];
v[b]=aux;
}
inline void coborare(int p){
int f, q;
f=1;
while((f==1)&&(fiust(p)<n)){
q=fiust(p);
if((fiudr(p)<n)&&(v[q]>=v[fiudr(p)])){
q=fiudr(p);
}
if(v[q]<v[p]){
swap(p, q);
p=q;
}else{
f=0;
}
}
}
inline void urcare(int p){
while((p!=0)&&(v[p]<v[tata(p)])){
swap(p, tata(p));
p=tata(p);
}
}
inline void adauga(int x){
v[n]=x;
n++;
urcare(n-1);
}
inline void sterge(int p){
n--;
v[0]=v[n];
coborare(0);
}
int main(){
int k, a, i, j, x;
FILE *fin, *fout;
fin=fopen("interclasari.in", "r");
fout=fopen("interclasari.out", "w");
fscanf(fin, "%d", &k);
for(i=0; i<k; i++){
fscanf(fin, "%d", &a);
for(j=0; j<a; j++){
fscanf(fin, "%d", &x);
adauga(x);
}
}
fprintf(fout, "%d\n", n);
while(n>1){
fprintf(fout, "%d ", v[0]);
sterge(0);
}
if(n==1){
fprintf(fout, "%d\n", v[0]);
}
fclose(fin);
fclose(fout);
return 0;
}