Pagini recente » Cod sursa (job #73566) | Cod sursa (job #2113148) | Cod sursa (job #2483645) | Cod sursa (job #2401145) | Cod sursa (job #1793645)
#include <stdio.h>
#define MAXN 200000
int poz[MAXN+1], h[MAXN+1], v[MAXN+1];
inline void swap(int p1, int p2){
int e1=h[p1], e2=h[p2];
poz[e1]=p2;
poz[e2]=p1;
h[p1]=e2;
h[p2]=e1;
}
inline void urca(int poz){
while(poz>1 && v[h[poz]]<v[h[poz/2]]){
swap(poz,poz/2);
poz/=2;
}
}
void coboara(int p, int n){
int fs=2*p, fd=2*p+1, bun=p;
if(fs<n && v[h[fs]]<v[h[bun]]) bun=fs;
if(fd<n && v[h[fd]]<v[h[bun]]) bun=fd;
if(bun!=p){
swap(bun,p);
coboara(bun,n);
}
}
int main()
{
FILE *fi=fopen("heapuri.in", "r"), *fo=fopen("heapuri.out", "w");
int last, op, p, j, c, x;
fscanf(fi, "%d", &op);
last=1;
p=1;
for(j=0;j<op;j++){
fscanf(fi, "%d", &c);
if(c==3)
fprintf(fo, "%d\n", v[h[1]]);
else{
fscanf(fi, "%d", &x);
if(c==1){
v[p]=x;
poz[p]=last;
h[last]=p;
urca(last++);
p++;
}
if(c==2){
x=poz[x];
swap(x,--last);
coboara(x,last);
}
}
}
fclose(fi);
fclose(fo);
return 0;
}