Pagini recente » Cod sursa (job #1918264) | Cod sursa (job #2679152) | Cod sursa (job #1901734) | Cod sursa (job #2402313) | Cod sursa (job #2941069)
#include <bits/stdc++.h>
using namespace std;
#define nmax 200000
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int heap[nmax+5],poz[nmax+5],n;
void urcare(int k){
while(k>1){
if(heap[k]<=heap[k/2])return;
else swap(heap[k],heap[k/2]),poz[heap[k]]=k,poz[heap[k/2]]=k/2,k/=2;
}
}
void coborare(int k){
while(k*2<=n){
int p=k*2;
if(p+1<=n and heap[p]>heap[p+1])p++;
if(heap[k]>=heap[p])return;
else swap(heap[k],heap[p]),poz[heap[p]]=p,poz[heap[k]]=k,k=p;
}
}
int main()
{
int q;
f>>q;
for(int i=1;i<=q;++i){
int cer;f>>cer;
if(cer==1){
int x;f>>x;
heap[++n]=x;
poz[x]=n;
urcare(n);
}
if(cer==2){
int x;f>>x;
urcare(poz[x]);
heap[1]=heap[n--];
poz[heap[1]]=1;
coborare(1);
}
if(cer==3){
g<<heap[1]<<"\n";
}
}
}