Pagini recente » Cod sursa (job #1049375) | Cod sursa (job #935861) | Cod sursa (job #1466082) | Cod sursa (job #86824) | Cod sursa (job #2037163)
#include <iostream>
#include <fstream>
#define Nmax 200005
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int Val[Nmax],Poz[Nmax],Heap[Nmax];
int NHeap,K,op,N,x;
void upHeap(int POZ){
if(POZ == 1) return;
int father = POZ / 2;
if(Val[Heap[father]] > Val[Heap[POZ]]){
swap(Heap[father],Heap[POZ]);
swap(Poz[Heap[father]],Poz[Heap[POZ]]);
upHeap(father);
}
return;
}
void downHeap(int POZ){
int sonl = POZ*2;
int sonr = POZ*2+1;
if(sonl > NHeap && sonr > NHeap) return;
if(Val[Heap[sonl]] < Val[Heap[POZ]]){
swap(Heap[sonl],Heap[POZ]);
swap(Poz[Heap[sonl]],Poz[Heap[POZ]]);
downHeap(sonl);
}
if(sonr <= NHeap && Val[Heap[sonr]] < Val[Heap[POZ]]){
swap(Heap[sonr],Heap[POZ]);
swap(Poz[Heap[sonr]],Poz[Heap[POZ]]);
downHeap(sonr);
}
}
int main()
{
fin>>N;
while(N--){
fin>>op;
switch(op){
case 1:
fin>>x;
NHeap++;
Val[++K] = x;
Poz[K] = NHeap;
Heap[NHeap] = K;
upHeap(NHeap);
break;
case 2:
fin>>x;
Heap[Poz[x]] = Heap[NHeap];
Poz[Heap[NHeap]] = Poz[x];
NHeap--;
downHeap(Poz[x]);
break;
case 3:
fout<<Val[Heap[1]]<<"\n";
break;
}
}
return 0;
}