Cod sursa(job #1051154)

Utilizator bughybv31bogdan bughybv31 Data 9 decembrie 2013 19:22:17
Problema Heapuri Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include <cstdio>
#define N 200010
#define max  1000000100
int n;

struct element
{
	int nr;
	int ordine;
};
element heap[N];
void makeheap(int i , int n)
{
	if (i == n + 1)
		return;
	if (heap[i].nr < heap[i / 2].nr)
	{
		element aux = heap[i];
		heap[i] = heap[i / 2];
		heap[i / 2] = aux;
		makeheap(i / 2 , n);
	}
	makeheap(i + 1 , n);
}
void insertheap(element x , int *n)
{
	(*n)++;
	heap[*n] = x;
	makeheap(*n , *n);
}
int main()
{
	int x;
	freopen ("heapuri.in" , "r" , stdin);
	freopen ("heapuri.out" , "w" , stdout);
	scanf ("%d" , &n);
	heap[0].nr = -max;
	int s = 0;
	int k = 0;
	for (int i = 0 ; i < n ; ++i)
	{
		int x;
		element y;
		scanf ("%d" , &x);
		if (x == 1)
		{
			scanf("%d" , &y.nr);
			s++;
			y.ordine = s;
			insertheap(y , &k);
		}
		if (x == 3)
		{
			printf("%d\n" , heap[1].nr);
		}
		if (x == 2)
		{
			int c;
			scanf("%d" , &c);
			for (int i = 1 ; i <= k ; ++i)
				if (heap[i].ordine == c)
				{
					heap[i] = heap[k];
					makeheap(i , k);
					k--;
					break;
				}
		}
	}
	/*
	for (int i = 1 ; i <= k ; ++i)
		printf ("%d " , heap[i].nr);*/
	return 0;
}