Pagini recente » Cod sursa (job #1573916) | Cod sursa (job #2073211) | Cod sursa (job #2573107) | Cod sursa (job #336642) | Cod sursa (job #1809786)
#include <stdio.h>
#define MAXN 210000
int n = 0,poz[210000];
struct hi{
int val,pozi;};
struct hi heap[MAXN];
void add(int x){
int i, j;
struct hi aux;
++n;
heap[n].val = x;
heap[n].pozi = n;
poz[n] = n;
i = n;
while(heap[i].val < heap[i / 2].val && i > 1){
poz[heap[i].pozi] = i / 2 + i%2;
poz[heap[i / 2].pozi] = i;
aux = heap[i];
heap[i] = heap[i / 2];
heap[i / 2] = aux;
i = i / 2;
}
}
void del(int x){
heap[poz[x]] = heap[n];
--n;
int aux, i = poz[x];
while((heap[i].val > heap[i * 2].val && i * 2 <= n) || (heap[i].val > heap[i * 2 + 1].val && i * 2 + 1 <= n)){
if(2 * i + 1 <=n){
if(heap[2 * i].val > heap[2 * i + 1].val){
poz[heap[i].pozi] = 2 * i;
poz[heap[i * 2].pozi] = i;
aux = heap[2 * i].val;
heap[2 * i].val = heap[i].val;
heap[i].val = aux;
i = i * 2;
}
else{if(i * 2 + 1 <= n){
poz[heap[i].pozi] = 2 * i;
poz[heap[i * 2 + 1].pozi] = i;
aux = heap[2 * i + 1].val;
heap[2 * i + 1].val = heap[i].val;
heap[i].val = aux;
i = i * 2 + 1;
}
}
}
else{
poz[heap[i].pozi] = 2 * i;
poz[heap[i * 2].pozi] = i;
aux = heap[2 * i].val;
heap[2 * i].val = heap[i].val;
heap[i].val = aux;
i = i * 2;
}
}
}
int min(){
return heap[1].val;
}
int main(){
FILE *f,*g;
f=fopen("heapuri.in","r");
g=fopen("heapuri.out","w");
int i, n, x, y;
fscanf(f,"%d",&n);
for(i = 1;i <= n; ++i){
fscanf(f,"%d",&x);
if(x == 1){
fscanf(f,"%d",&y);
add(y);
}
if(x == 2){
fscanf(f,"%d",&y);
del(y);
}
if(x == 3){
y = min();
fprintf(g,"%d\n",y);
}
}
return 0;
}