Pagini recente » Cod sursa (job #2153814) | Cod sursa (job #240832) | Cod sursa (job #942313) | Cod sursa (job #782747) | Cod sursa (job #1343545)
#include <fstream>
#include <iostream>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int n,heap[299999],nr;
int pozitie[299999];
int valori[299999];
void sift(int N,int k){
int son;
do{
son = 0;
if(k*2<=N){ son=k*2;
if(k*2+1 <=N && valori[heap[k*2]]>valori[heap[k*2+1]]) son = k*2+1;
if(son>N) son = 0;
}
if(son){swap(heap[k],heap[son]);
pozitie[heap[k]]=k;
pozitie[heap[son]]=son;
k=son;}
}while(son);
}
void percolate(int k){
int val = heap[k];
while(k>1 && valori[heap[k/2]]>valori[val] ){
heap[k]=heap[k/2];
pozitie[heap[k]]=k;
k=k/2;
}
heap[k]=val;
pozitie[heap[k]]=k;
}
void inserare(){
int x;
f>>x;n++;
heap[n]=n;
pozitie[n]=n;
valori[n]=x;
percolate(n);
}
void eliminare(){
int x;
f>>x;
valori[heap[pozitie[x]]] = 1000000003;
sift(n,pozitie[x]);
}
int main()
{
int x;
int op;
f>>nr;
for(int i=1;i<=nr;i++){
f>>op;
if(op==1) inserare();
else if(op == 2) eliminare();
else g<<valori[heap[1]]<<endl;
}
return 0;
}