Pagini recente » Cod sursa (job #1220064) | Cod sursa (job #1769867) | Cod sursa (job #3202852) | Cod sursa (job #1683602) | Cod sursa (job #822433)
Cod sursa(job #822433)
#include <cstdio>
#include <cstdlib>
#define nmax 200001
FILE*f=fopen("heapuri.in","r");
FILE*g=fopen("heapuri.out","w");
long v[nmax],poz[nmax],intr[nmax];
int k=0;
void swap(long &a,long &b)
{
int aux;
aux=a;
a=b;
b=aux;
aux=poz[a];
poz[a]=poz[b];
poz[b]=aux;}
void up_heap(int k)
{
if ( (k==1) || (v[k]>=v[k/2]) )
return;
else
swap(v[k],v[k/2]);
up_heap(k/2);
}
void down_heap(int a)
{
int min;
if ((2*a)<=k)
{
min=2*a;
if ((2*a+1)<=k)
if (v[min]>v[2*a+1])
min=2*a+1;
swap(v[min],v[a]);
down_heap(min);
}
else
return;
}
int main()
{
long n,tip,x;
fscanf(f,"%d",&n);
while (n>0)
{
fscanf(f,"%d",&tip);
if (tip==1)
{
fscanf(f,"%d",&x);
k++;
v[k]=x;intr[k]=x;
poz[x]=k;
up_heap(k);}
else
if (tip==2)
{
fscanf(f,"%d",&x);
int q=poz[intr[x]];
swap(v[q],v[k]);
k--;
down_heap(q);}
else
fprintf(g,"%d \n",v[1]);
n--;
}
return 0;
}