Cod sursa(job #1818864)
Utilizator | Data | 29 noiembrie 2016 21:37:38 | |
---|---|---|---|
Problema | Heapuri | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.88 kb |
#include<fstream>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int v[200005],i,n,cod,w[200005],k,q[200005],c,p,t,x,sol;
int main(){
fin>>n;
k=0;
t=0;
for(i=1;i<=n;i++){
fin>>cod;
if(cod==1){
k++;
t++;
fin>>v[k];
w[k]=t;
q[t]=k;
c=k;
p=c/2;
while(p>=0){
if(v[c]<v[p]){
swap(v[c],v[p]);
swap(w[c],w[p]);
q[w[p]]=p;
q[w[c]]=c;
c=p;
p=c/2;
}
else{
break;
}
}
}
if(cod==2){
fin>>x;
sol=q[x];
v[sol]=v[k];
w[sol]=w[k];
q[w[sol]]=q[w[k]];
k--;
c=sol;
p=c/2;
if(v[c]<v[p]){
while(p>=0){
if(v[c]<v[p]){
swap(v[c],v[p]);
swap(w[c],w[p]);
q[w[p]]=p;
q[w[c]]=c;
c=p;
p=c/2;
}
else
break;
}
}
else{
c=sol*2;
p=c/2;
while(c<=k){
if(v[c+1]<v[c]&&c+1<=k){
c++;
}
swap(v[p],v[c]);
swap(w[p],w[c]);
q[w[p]]=p;
q[w[c]]=c;
p=c;
c=2*p;
}
}
}
if(cod==3){
fout<<v[1]<<"\n";
}
}
return 0;
}