Pagini recente » Cod sursa (job #2032774) | Cod sursa (job #130917) | Cod sursa (job #3122958) | Cod sursa (job #2106756) | Cod sursa (job #2494519)
#include<fstream>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int n,T,nr,tip,x,auxiliar,parinte,copil;
int heap[200005],v[200005],pozitii[200005];
int main(){
fin>>T;
for(int i=1;i<=T;i++){
fin>>tip;
if(tip==1){
fin>>x;
heap[++n]=x;
v[++nr]=n;
pozitii[n]=copil=nr;parinte=copil/2;
while(parinte>0){
if(heap[v[copil]]<heap[v[parinte]]){
auxiliar=v[copil];
v[copil]=v[parinte];
v[parinte]=auxiliar;
pozitii[v[copil]]=copil;
pozitii[v[parinte]]=parinte;
}
else{
break;
}
copil=parinte;
parinte=parinte/2;
}
}
///
if(tip==2){
fin>>x;
heap[x]=-1;
copil=pozitii[x];
parinte=copil/2;
while(parinte!=0){
if(heap[v[copil]]<heap[v[parinte]]){
auxiliar=v[copil];
v[copil]=v[parinte];
v[parinte]=auxiliar;
pozitii[v[copil]]=copil;
pozitii[v[parinte]]=parinte;
}
else{
break;
}
copil=parinte;
parinte=parinte/2;
}
v[1]=v[nr--];
pozitii[v[1]]=1;
parinte=1;
copil=2;
while(copil<=nr){
if(copil+1<=nr&&heap[v[copil+1]]<heap[v[copil]])
copil++;
if(heap[v[parinte]]>heap[v[copil]]){
auxiliar=v[parinte];
v[parinte]=v[copil];
v[copil]=auxiliar;
pozitii[v[copil]]=copil;
pozitii[v[parinte]]=parinte;
}
else{
break;
}
parinte=copil;
copil=2*parinte;
}
}
///
if(tip==3){
fout<<heap[v[1]]<<"\n";
}
}
return 0;
}