Pagini recente » Cod sursa (job #636778) | Cod sursa (job #2420057) | Cod sursa (job #2740498)
#include <iostream>
#include <fstream>
using namespace std;
#define maxN 200004
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int heap[maxN], v[maxN], pozitie[maxN];
int nr = 0;
int k = 0;
void urca(int index){
if (index > 0){
int tata = index/2;
if( v[heap[tata]] > v[heap[index]]){
swap(heap[tata], heap[index]);
swap(pozitie[heap[tata]], pozitie[heap[index]]);
urca(tata);
}
}
}
void coboara(int index){
int fiu = index;
int stanga = index*2;
int dreapta = index* 2 + 1;
if(stanga <= k && v[heap[stanga]] < v[heap[fiu]])
fiu = stanga;
if(dreapta <= k && v[heap[dreapta]] < v[heap[fiu]])
fiu = dreapta;
if(fiu != index){
swap(heap[index],heap[fiu]);
swap(pozitie[heap[index]], pozitie[heap[fiu]]);
coboara(fiu);
}
}
void push(int x){
k++;
heap[k] = x;
pozitie[heap[k]] = k;
urca(k);
}
void pop(int x){
int index = pozitie[x];
swap(heap[index],heap[k]);
swap(pozitie[heap[index]],pozitie[heap[k]]);
k--;
urca(index);
coboara(index);
}
int main()
{
int n;
f >> n;
for(int i = 0; i< n ; i++){
int cod;
f >> cod;
if (cod == 1){
int x;
f>> x;
nr++; v[nr] = x;
push(nr);
}
if (cod == 2){
int j;
f >> j;
pop(j);
}
if( cod == 3){
g << v[heap[1]]<<endl;
}
}
f.close();
g.close();
return 0;
}