Cod sursa(job #409440)

Utilizator S7012MYPetru Trimbitas S7012MY Data 3 martie 2010 17:43:21
Problema Heapuri Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include <fstream>
#define maxint 10001;
using namespace std;

long long a[100000];
long long N=0;

void upheap(int k) {
	int val=a[k]; 
	a[0]=0;
	while (a[k/2]>=val) {
		a[k]=a[k/2];
		k/=2;
	}
	a[k]=val;
}


void downheap(int k) {
	int j, val=a[k];
	while(k<=N/2) {
		j=k+k;
		if(j<N) 
			if(a[j]>a[j+1])
				j++;
		if(val<=a[j]) break;
		a[k]=a[j];
		k=j;
	}
	a[k]=val;
}

void insert (int val) {
	N++;
	a[N]=val;
	upheap(N);
}

int remove() {
	int val=a[1];
	a[1]=a[N];
	N--;
	downheap(1);
	return val;
}

void del (int k) {
	int i;
	for(i=0; i<N; i++) {
		if (a[i]==k) {
			a[i]=a[N];
			N--;
			break;
		}
	}
	downheap(i);
}

int main()
{
	long long y,i,j,k,cont=1,vect[100000];
	ifstream f("heapuri.in");
	ofstream g("heapuri.out");
	f>>y;
	for(i=0; i<y; i++) {
		f>>j;
		if(j==1) {
			f>>k;
			insert (k);
			vect[cont]=k;
			cont++;
		}
		else if(j==2) {
			f>>k;
			del(vect[k]);
		}
		else g<<a[1]<<endl;
	}
	f.close();
	g.close();
}