Pagini recente » Cod sursa (job #1010906) | Cod sursa (job #1041898) | Cod sursa (job #1601136) | Cod sursa (job #2612087) | Cod sursa (job #2633090)
#include<fstream>
#define maxn 500005
#define pb push_back
using namespace std;
int m,o,x,k,n,v[maxn],poz[maxn],heap[maxn];
ifstream cin("heapuri.in");
ofstream cout("heapuri.out");
void push(int x){
poz[++n]=x;
v[n]=++k;
heap[k]=n;
x=k;
while(x!=1&&poz[heap[x/2]]>poz[heap[x]]){
swap(v[heap[x/2]],v[heap[x]]);
swap(heap[x/2],heap[x]);
x=x/2;
}
}
void pop(int x){
int p=v[x],son;
poz[x]=-1;
while(p!=1){
swap(v[heap[p]],v[heap[p/2]]);
swap(heap[p],heap[p/2]);
p/=2;
}
swap(v[heap[1]],v[heap[k]]);
swap(heap[1],heap[k]);
p=1;son=p;
k--;
while(son){
son=0;
if(k>\=2*p&&poz[heap[2*p]]<poz[heap[p]])
son=2*p;
if(k>=2*p+1&&poz[heap[2*p+1]]<poz[heap[p]]&&poz[heap[2*p+1]]<poz[heap[2*p]])
son=2*p+1;
if(son)
swap(v[heap[son]],v[heap[son/2]]),
swap(heap[son],heap[son/2]);
p=son;
}
}
int main(){
cin>>m;
while(m--){
cin>>o;
if(o<3)
cin>>x;
switch(o){
case 1 : push(x); break;
case 2 : pop(x); break;
case 3 : cout<<poz[heap[1]]<<'\n'; break;
}
}
return 0;
}