Cod sursa(job #431340)

Utilizator forever_yangGroza Marius-Cristian forever_yang Data 31 martie 2010 21:09:34
Problema Heapuri Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include<fstream>
using namespace std;

void inserare(int a[],int n,int nr)
{int poz;

poz=n;
	while(a[poz]<a[poz/2]&&poz>1)
	{
	a[poz]=a[poz/2];
	a[poz/2]=nr;
	poz=poz/2;
	}
	
	

}

void coborare(int a[],int &poz,int nr,int n)
{
int son;
do{son=0;
  if(poz*2<n&&poz*2+1<=n)
	{	if(a[poz*2]<a[poz*2+1])
		{if(a[poz*2]<a[poz])
		{son=1; 
		a[poz]=a[poz*2];
		a[poz*2]=nr;
		poz=poz*2;}}
		else
			if(a[poz*2+1]<a[poz])
			{son=1;
			a[poz]=a[poz*2+1];
			a[poz*2+1]=nr;
			poz=poz*2+1;}
		
	}
	else
		if(poz*2+1>n&&poz*2<=n)
		if(a[poz*2]<a[poz])
		{a[poz]=a[poz*2];
		a[poz*2]=nr;
		poz=poz*2;
		son=1;
		}


}
while(son);


}




int main()
{int nn=0,a[200010],i,ii,nr,n=0,c[200010];
	
	ifstream f("heapuri.in");
	ofstream g("heapuri.out");
	f>>nn;
	for(i=1;i<=nn;i++)
	{
	f>>nr;
	if(nr==1)
		{
			f>>nr;
			a[n+1]=nr;
			n++;
			inserare(a,n,nr);
			c[n]=nr;
		}
	else
	if(nr==2)
		{f>>nr;
		ii=1;
		while(a[ii]!=c[nr])
			ii++;
			a[ii]=a[n];
			n--;
			if(ii>1&&a[ii/2]>a[ii])
				inserare(a,ii,a[ii]);
			else
				coborare(a,ii,a[ii],n);
		}
	else
		if(nr==3)
		{g<<a[1]<<"\n";
		
			
		}
		
	}
	
	
	

return 0;}