Cod sursa(job #631953)

Utilizator sunt_emoSunt emo sunt_emo Data 9 noiembrie 2011 22:38:21
Problema Heapuri Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <fstream>
#define N 200010
using namespace std;

std::ifstream in ("heapuri.in");
std::ofstream out ("heapuri.out");
int h[2*N],a[N],b[N],n,m,i,k,nh,z;

void up (int k) {
	if (k>1)
		if (a[h[k/2]]>a[h[k]]) {
			b[h[k]]=k/2; b[h[k/2]]=k;
			z=h[k]; h[k]=h[k/2]; h[k/2]=z;
			up (k/2);
		}
}

void down (int k) {
	if (2*k>nh) return;
	i=k;
	if (a[h[k]]>a[h[2*k]]) i=2*k;
	if (2*k+1<=nh) if (a[h[i]]>a[h[2*k+1]]) i=2*k+1;
	if (i!=k) {
		b[h[k]]=i; b[h[i]]=k;
		z=h[k]; h[k]=h[i]; h[i]=z;
		down (i);
	}
}

int main () {
	in>>m;
	while (m--) {
		in>>i;
		if (i==1) {
			in>>a[++n];
			b[n]=++nh;
			h[nh]=n;
			up (nh);
		}
		else if (i==2) {
			in>>k;
			a[k]=2000000000;
			down (b[k]);
			nh--;
		}
		else out<<a[h[1]]<<"\n";
	}
	return 0;
}