Pagini recente » Borderou de evaluare (job #367082) | Cod sursa (job #665135) | Cod sursa (job #3141494) | Cod sursa (job #3193327) | Cod sursa (job #1193283)
#include<fstream>
using namespace std;
int h[4000005],hp;
void upheap(int k){
while(k>1 && h[k] < h[k/2])
{
swap(h[k],h[k/2]);
k/=2;
}
}
void downheap(int k){
int nod = 1;
while(nod)
{
nod = 0;
if(2*k <= hp)
{
nod = 2*k;
if(nod < hp && h[nod+1]<h[nod]) ++nod;
if(h[nod] >= h[k]) nod = 0;
if(nod)
{
swap(h[k],h[nod]);
k = nod;
}
}
}
}
int main(){
ifstream cin("interclasari.in");
ofstream cout("interclasari.out");
int K,N,i,x,xmax=0,sm=0;
cin>>K;
while(K--)
{
cin>>N;
sm += N;
for(i=1;i<=N;++i)
{
cin>>x;
h[++hp] = x;
upheap(hp);
}
}
cout<< sm << '\n';
while(hp)
{
cout << h[1] << ' ';
swap(h[1],h[hp]);
--hp;
downheap(1);
}
return 0;
}