Pagini recente » Cod sursa (job #954210) | Cod sursa (job #2289185) | Cod sursa (job #815062) | Cod sursa (job #331414) | Cod sursa (job #2433086)
#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],Poz[MAX] ,sz,nr;
int main(){
int i,task,x;
fin>>n;
while(n--){
fin>>task;
if(task<3)
fin>>x;
switch(task){
case 1:
A[++nr]=x;
Heap[++sz]=nr;
Poz[nr]=sz;
x=sz;
while(x/2&&A[Heap[x/2]]>A[Heap[x]]){
swap(Heap[x/2],Heap[x]);
swap(Poz[Heap[x/2]],Poz[Heap[x]]);
x/=2;
}
break;
case 2:
x=Poz[x];
while(x*2+1<=sz){
if(A[Heap[x*2]]<A[Heap[x*2+1]]){
swap(Heap[x*2],Heap[x]);
swap(Poz[Heap[x*2]],Poz[Heap[x]]);
x*=2;
}else{
swap(Heap[x*2+1],Heap[x]);
swap(Poz[Heap[x*2+1]],Poz[Heap[x]]);
x=x*2+1;
}
}
if(x*2<=sz){
swap(Heap[x*2],Heap[x]);
swap(Poz[Heap[x*2]],Poz[Heap[x]]);
}
--sz;
break;
case 3:
fout<<A[Heap[1]]<<'\n';
break;
}
}
return 0;
}