Pagini recente » Cod sursa (job #2414148) | Cod sursa (job #1489406) | Cod sursa (job #1255488) | Cod sursa (job #493045) | Cod sursa (job #1418964)
#include <fstream>
#include <vector>
#define DIM 30000002
using namespace std;
ifstream fin("interclasari.in");
ofstream fout("interclasari.out");
int K,N;
int H[DIM];
vector <int> v[21];
int a[21];
int n;
int ans;
void upheap(int x){
int c=x;
int p=c/2;
while(p>=1 && H[p]>H[c]){
swap(H[c],H[p]);
c=p;
p/=2;
}
}
void downheap(int x){
int p=x;
int c=2*p;
while(c<=n){
if(c+1<=n && H[c]>H[c+1])
c++;
if(H[p]>H[c]){
swap(H[p],H[c]);
p=c;
c*=2;
}
else
break;
}
}
void insert(int x){
H[++n]=x;
upheap(n);
}
void erase(){
H[1]=H[n];
n--;
downheap(1);
}
int main(){
fin>>K;
for(int i=1;i<=K;i++){
fin>>a[i];
ans+=a[i];
v[i].push_back(1);
for(int j=1;j<=a[i];j++){
int x;
fin>>x;
v[i].push_back(x);
}
}
fout<<ans<<"\n";
if(ans!=0)
while(1){
int ok=0;
for(int i=1;i<=K;i++)
if(v[i][0]<=a[i])
insert(v[i][v[i][0]++]),ok=1;
fout<<H[1]<<" ";
erase();
if(!ok)
break;
}
while(n!=0){
fout<<H[1]<<" ";
erase();
}
fin.close();fout.close();
return 0;
}