Pagini recente » Cod sursa (job #423521) | Cod sursa (job #2613732) | Cod sursa (job #2605852) | Cod sursa (job #2420808) | Cod sursa (job #1051173)
#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 >> 1].nr)
{
element aux = heap[i];
heap[i] = heap[i >> 1];
heap[i >> 1] = aux;
makeheap(i >> 1 , 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;
}