Pagini recente » Cod sursa (job #1847112) | Cod sursa (job #2805683) | Cod sursa (job #2334486) | Cod sursa (job #864255) | Cod sursa (job #486419)
Cod sursa(job #486419)
#include<stdio.h>
#define NMAX 200001
int heap[NMAX],order[NMAX],n,cont=0;
void adauga(int x)
{
heap[++cont] = order[cont] = x;
int var = cont,aux;
while(var/2 > 0 && heap[var/2] > heap[var])
{
aux = heap[var/2];
heap[var/2] = heap[var];
heap[var] = aux;
var /= 2;
}
}
void elimina(int x)
{
x = order[x];
int i = 1, aux;
for(;i<=cont && heap[i] != x;++i);
heap[i] = heap[cont];
while(i/2 > 0 && heap[i/2] > heap[i])
{
aux = heap[i/2];
heap[i/2] = heap[i];
heap[i] = aux;
i /= 2;
}
while(i<=cont/2)
{
if(i*2+1 <= cont && heap[i*2+1] < heap[i*2] && heap[i*2+1] < heap[i])
{
aux = heap[i];
heap[i] = heap[i*2+1];
heap[i*2+1] = aux;
i = i*2+1;
}
else if(heap[i*2] < heap[i])
{
aux = heap[i];
heap[i] = heap[i*2];
heap[i*2] = aux;
i = i*2;
}
else i = cont+1;
}
heap[cont--] = 0;
}
int main()
{
FILE*g = fopen("heapuri.out","w");
FILE*f = fopen("heapuri.in","r");
fscanf(f,"%d",&n);
int i=1,tip,x;
for(;i<=n;++i)
{
fscanf(f,"%d",&tip);
if(tip == 1)
{
fscanf(f,"%d",&x);
adauga(x);
}
if(tip == 2)
{
fscanf(f,"%d",&x);
elimina(x);
}
if(tip == 3)
fprintf(g,"%d\n",heap[1]);
}
fclose(f);
fclose(g);
return 0;
}