Pagini recente » Cod sursa (job #2271536) | Cod sursa (job #610373) | Cod sursa (job #2241416) | Monitorul de evaluare | Cod sursa (job #1051154)
#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;
}