Pagini recente » Cod sursa (job #1480044) | Cod sursa (job #750605) | Cod sursa (job #2216291) | Cod sursa (job #1302642) | Cod sursa (job #2433158)
#include <fstream>
#define MAX (int)(2e5+5)
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int n,Heap[MAX*4],A[MAX],PozInHeap[MAX],sz,nr;
int main(){
int i,task,x,y;
fin>>n;
while(n--){
fin>>task;
if(task<3)
fin>>x;
switch(task){
case 1:
A[++nr]=x;
Heap[++sz]=nr;
PozInHeap[nr]=sz;
x=sz;
while(x/2&&A[Heap[x/2]]>A[Heap[x]]){
swap(PozInHeap[Heap[x/2]],PozInHeap[Heap[x]]);
swap(Heap[x/2],Heap[x]);
x/=2;
}
break;
case 2:
x=PozInHeap[x];
while(Heap[x*2+1]||A[Heap[x*2]]){
if(A[Heap[x*2]]<A[Heap[x*2+1]]&&A[Heap[x*2]]){
swap(Heap[x*2],Heap[x]);
swap(PozInHeap[Heap[x*2]],PozInHeap[Heap[x]]);
x*=2;
}else if(A[Heap[x*2+1]]){
swap(Heap[x*2+1],Heap[x]);
swap(PozInHeap[Heap[x*2+1]],PozInHeap[Heap[x]]);
x=x*2+1;
}else{
swap(Heap[x*2],Heap[x]);
swap(PozInHeap[Heap[x*2]],PozInHeap[Heap[x]]);
x*=2;
}
}
if(Heap[x*2]){
swap(PozInHeap[Heap[x*2]],PozInHeap[Heap[x]]);
swap(Heap[x*2],Heap[x]);
x*=2;
}
Heap[x]=0;
break;
case 3:
fout<<A[Heap[1]]<<'\n';
break;
}
}
return 0;
}