Cod sursa(job #1193283)

Utilizator ion824Ion Ureche ion824 Data 31 mai 2014 13:37:48
Problema Interclasari Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#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;
}