Pagini recente » Cod sursa (job #2489824) | Cod sursa (job #245245) | Cod sursa (job #1570316) | Cod sursa (job #862189) | Cod sursa (job #969866)
Cod sursa(job #969866)
#include<stdio.h>
#include<stdlib.h>
struct Node {
int value;
int ord;
};
class MinHeap{
public:
struct Node *H;
int Dcurr, Dmax;
MinHeap(int maxDim){
this->Dmax = maxDim;
H = new Node[this->Dmax + 1];
Dcurr = 0;
}
void Insert(struct Node x){
Dcurr++;
H[Dcurr] = x;
pushUp(Dcurr);
}
int retMin(){
return H[1].value;
}
void extractOrd(int poz){
int i;
for(i=1; i<=Dcurr; i++){
if(H[i].ord == poz)
break;
}
H[i] = H[Dcurr];
Dcurr--;
pushUp(Dcurr);
heapify(Dcurr);
}
void pushUp(int l){
int parent;
Node aux;
parent = l/2;
while(l > 1 && H[parent].value > H[l].value){
aux = H[parent];
H[parent] = H[l];
H[l] = aux;
l = parent;
parent = l/2;
}
}
void heapify(int l){
int left, right, m;
struct Node aux;
left = 2*l;
right = left + 1;
if(left <= Dcurr && H[left].value < H[l].value)
m = left;
else
m = l;
if(right <= Dcurr && H[right].value < H[l].value)
m = right;
if(m != l){
aux = H[m];
H[m] = H[l];
H[l] = aux;
heapify(m);
}
}
};
int main(){
int info, ent, code, N, i, ord = 0, min;
struct Node x;
class MinHeap hp(1000000);
FILE *pf, *pg;
pf = fopen("heapuri.in", "r");
pg = fopen("heapuri.out", "w");
fscanf(pf, "%d", &N);
for(i=1; i<=N; i++){
fscanf(pf, "%d", &code);
if(code == 1){
fscanf(pf, "%d", &info);
ord++;
x.value = info;
x.ord = ord;
hp.Insert(x);
}
else
if(code == 2){
fscanf(pf, "%d", &ent);
hp.extractOrd(ent);
}
else
if(code == 3){
min = hp.retMin();
fprintf(pg, "%d\n", min);
}
}
fclose(pf);
fclose(pg);
return 0;
}