Pagini recente » Cod sursa (job #2324072) | Cod sursa (job #1368465) | Cod sursa (job #2252799) | Cod sursa (job #1959175) | Cod sursa (job #2924805)
#include <fstream>
using namespace std;
ifstream cin("heapuri.in");
ofstream cout("heapuri.out");
int v[200005], h[200005], poz[200005], a[200005];
int k, i, n, op, x, y;
void adauga(int aux){
while(aux>1 && a[v[aux]]<a[v[aux/2]]){
swap(v[aux], v[aux/2]);
swap(poz[v[aux]], poz[v[aux/2]]);
aux=aux/2;
}
}
void sterge(int p){
if(p==n)
n--;
else{
swap(v[p], v[n]);
swap(poz[v[p]], poz[v[n]]);
n--;
int aux=p;
int p1=aux;
while(aux>1 && a[v[aux]]<a[v[aux/2]]){
swap(v[aux], v[aux/2]);
swap(poz[v[aux]], poz[v[aux/2]]);
p1=aux/2;
aux=aux/2;
}
int c=2*p1;
while(c<=n){
if(c+1<=n && a[v[c+1]]<a[v[c]])
c++;
if(a[v[c]]<a[v[p1]]){
swap(v[c], v[p1]);
swap(poz[v[c]], poz[v[p1]]);
}
else
break;
p1=c;
c=2*p1;
}
}
}
int main(){
cin>>op;
for(i=1;i<=op;i++){
cin>>x;
if(x==1){
cin>>y;
a[++k]=y;
v[++n]=k;
poz[k]=n;
adauga(n);
}
if(x==2){
cin>>y;
sterge(poz[y]);
}
if(x==3){
cout<<a[v[1]]<<"\n";
}
}
}