Pagini recente » Cod sursa (job #2742582) | Cod sursa (job #1681922) | Cod sursa (job #740013) | Cod sursa (job #934818) | Cod sursa (job #2511491)
#include <iostream>
#include <fstream>
using namespace std;
int nr_elemente = 0,min_heap[200000],pozitie[10000000];
void inserare(int x){
nr_elemente++;
min_heap[nr_elemente] = x;
pozitie[nr_elemente] = x;
int i = nr_elemente;
while(i!=1 && min_heap[i]<min_heap[i/2]){
int aux = min_heap[i];min_heap[i] = min_heap[i/2];
min_heap[i/2] = aux;
i = i/2;
}
}
int minim(int x,int y){
if(x < y)
return x;
return y;
}
void stergere(int x){
int t;
for(int i =1;i<=nr_elemente;i++)
if(min_heap[i] == pozitie[x])
t = i;
if(t == nr_elemente){
nr_elemente--;
}
else{
int aux = min_heap[t];
min_heap[t] = min_heap[nr_elemente];
min_heap[nr_elemente] = aux;
nr_elemente--;int nr;
while(2*t<=nr_elemente&&min_heap[t] > minim(min_heap[2*t],min_heap[2*t+1])
) {
if(min_heap[2*t] <min_heap[2*t+1])
nr = 2*t;
else if(min_heap[2*t+1]<min_heap[2*t]&&2*t+1>nr_elemente)
{
if(min_heap[2*t]<min_heap[t])
nr = 2*t;
else break;
}
else nr = 2*t+1;
int aux = min_heap[t];
min_heap[t] = min_heap[nr];
min_heap[nr] = aux;
t = nr;
}
}
}
int main()
{ int n;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
f>>n;
int x,y;
for(int k =1;k<= n;k++){
f >> x;
if(x == 3)
g << min_heap[1]<<endl;
else {
f >> y;
if(x == 1)
inserare(y);
if(x == 2)
stergere(y);
}
}
return 0;
}