Pagini recente » Monitorul de evaluare | Cod sursa (job #1885181) | Statistici Motoasca Alexandru (AlexMotoasca) | Cod sursa (job #1146887) | Cod sursa (job #1296324)
#include <fstream>
#define dim 200003
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int v[dim],n,i,o,k,x,poz[dim],j,h[dim];
void insereaza(int x){
h[++k]=x;
poz[x]=k;
int c=k;
int p=k/2;
while(p>0){
if(v[h[p]]>v[h[c]]){
swap(h[p],h[c]);
swap(poz[h[c]],poz[h[p]]);
c=p;
p/=2;
}
else
break;
}
}
void sterge_radacina(){
v[1]=v[k];
k--;
int p=1,c=2*p;
while(c<=k){
if(c+1<=k && v[c+1]<v[c])
c++;
if(v[p]>v[c]){
swap(v[c],v[p]);
swap(poz[c],poz[p]);
p=c;
c*=2;
}
else
break;
}
}
void sterge(int x){
v[x]=-1;
int c=poz[x];
int p=c/2;
while(p>0){
if(v[h[p]]>v[h[c]]){
swap(h[c],h[p]);
swap(poz[c],poz[p]);
c=p;
p/=2;
}
else break;
}
sterge_radacina();
}
int main(){
fin>>n;
for(i=1;i<=n;i++){
fin>>o;
if(o==1){
fin>>v[k+1];
insereaza(k+1);
continue;
}
if(o==2){
fin>>x;
sterge(x);
continue;
}
if(o==3){
fout<<v[1]<<'\n';
}
}
fin.close();fout.close();
return 0;
}