Cod sursa(job #449934)

Utilizator lakat_tLakatos Tamas lakat_t Data 7 mai 2010 12:12:44
Problema Heapuri Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include<iostream>
#include<algo.h>
#include<fstream>

using namespace std;

ifstream fin("heapuri.in");
ofstream fout("heapuri.out");

long int v[200001],w[200001],n,m,db,c,a;
long int p;

long int keres(int poz)
{
	/*long int kezd=1;
	while(kezd<=db&&w[kezd]!=a) kezd++;
		return kezd;*/
	if(w[poz]==a) return poz;
	else 
		if(w[poz]<a)
		{
			if(2*poz<=db) 
			{
				int jobb=keres(2*poz);
				if(jobb==-1) 
					if(2*poz+1<=db) 
						return keres(2*poz+1);
					else;
				else return jobb;
			}
		}else return -1;
}

int main()
{	
	fin>>n;
	m=0;
	db=0;
	for(long int i=1;i<=n;i++)
	{
		fin>>c;
		switch(c){
		case 1:
			m++;
			fin>>v[m];
			db++;
			w[db]=v[m];
			make_heap(w+1,w+db+1,greater<int>()) ;
			break;
			
		case 2:
			fin>>a;
			a=v[a];
			p=keres(1);
			w[p]=w[db];
			db--;
			make_heap(w+1,w+db+1,greater<int>());
			break;
			
		case 3:
			fout<<w[1]<<"\n";
		}	
	}
	return 0;
}