Pagini recente » Cod sursa (job #3237381) | Cod sursa (job #12383) | Cod sursa (job #81) | Cod sursa (job #2945732) | Cod sursa (job #2808934)
#include <stdio.h>
#include <stdlib.h>
#define MAXN 262144
#define INF 1000000001
int arb[MAXN], poz[MAXN], revpoz[2 * MAXN], v[MAXN];
void adauga(int i, int el, int n){
int aux;
arb[n] = el;
poz[i] = n;
revpoz[n] = i;
while((1 < n) && (arb[n] < arb[n / 2])){
aux = arb[n];
arb[n] = arb[n / 2];
arb[n / 2] = aux;
poz[revpoz[n]] = n / 2;
poz[revpoz[n / 2]] = n;
aux = revpoz[n];
revpoz[n] = revpoz[n / 2];
revpoz[n / 2] = aux;
n /= 2;
}
}
void sterge(int i, int n){
int nod, el;
nod = poz[i];
nod = nod * 2;
if(arb[nod + 1] < arb[nod]){
nod++;
}
while(nod <= n){
arb[nod / 2] = arb[nod];
poz[revpoz[nod]] = nod / 2;
revpoz[nod / 2] = revpoz[nod];
nod = nod * 2;
if(arb[nod + 1] < arb[nod]){
nod++;
}
}
arb[nod / 2] = INF;
}
int main()
{
FILE *fin, *fout;
int n, i, op, val, j, put, nrel;
fin = fopen("heapuri.in", "r");
fscanf(fin, "%d", &n);
put = 1;
while(put <= n){
put *= 2;
}
for(i = 0; i <= put; i++){
arb[i] = INF;
}
j = 0;
nrel = 0;
fout = fopen("heapuri.out", "w");
for(i = 0; i < n; i++){
fscanf(fin, "%d", &op);
if(op == 1){
fscanf(fin, "%d", &v[j]);
nrel++;
adauga(j, v[j], nrel);
j++;
}else if(op == 2){
fscanf(fin, "%d", &val);
sterge(val - 1, nrel);
nrel--;
}else{
fprintf(fout, "%d\n", arb[1]);
}
}
fclose(fin);
fclose(fout);
return 0;
}