Pagini recente » Cod sursa (job #1185215) | Cod sursa (job #2176970) | Cod sursa (job #369250) | Cod sursa (job #3184) | Cod sursa (job #2489257)
#include <fstream>
#include <iostream>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int v[200010],cron[200010],i,j,cnt,poz[200010],c,x,n,m;
int main(){
fin>>m;
for(;m;m--){
fin>>c;
if(c==1){
fin>>x;
v[++n]=x;
cron[++cnt]=x;
poz[x]=n;
i=n;
while(v[i]<v[i/2] && i/2){
swap(v[i],v[i/2]);
swap(poz[v[i]],poz[v[i/2]]);
i/=2;
}
}
if(c==2){
fin>>x;
swap(v[poz[cron[x]]],v[n]);
poz[v[n]]=poz[cron[x]];
n--;
while(i*2<=n){
if(v[i]<=v[i*2] || v[i]<=v[i*2+1]){
if(2*i+1<=n){
if(v[i*2]<v[i*2+1]){
swap(poz[v[i]],poz[v[i*2+1]]);
swap(v[i],v[i*2+1]);
i=i*2+1;
}else{
swap(poz[v[i]],poz[v[i*2]]);
swap(v[i],v[i*2]);
i=i*2;
}
}else{
if(v[i]<v[i*2]){
swap(poz[v[i]],poz[v[i*2]]);
swap(v[i],v[i*2]);
i=i*2;
}else{
break;
}
}
}else{
break;
}
}
}
if(c==3)
fout<<v[1]<<"\n";
cout<<n<<"\n";
}
return 0;
}