Pagini recente » Cod sursa (job #2386241) | Cod sursa (job #2821650) | Cod sursa (job #1143518) | Cod sursa (job #304528) | Cod sursa (job #2740496)
#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 min = 100000;
if(index* 2 <= k && v[heap[index*2]] < v[heap[index]]){
min = index* 2;
}
if(index * 2 + 1 <= k && v[heap[index*2+1]] < v[heap[index]]){
if(v[heap[index*2+1]] < v[heap[min]])
min = index*2 + 1;
}
if(min != 100000){
swap(heap[index],heap[min]);
swap(pozitie[heap[index]], pozitie[heap[min]]);
coboara(min);
}
}
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;
}