Pagini recente » Cod sursa (job #3132148) | Cod sursa (job #2258092) | Cod sursa (job #1007213) | Cod sursa (job #1572847) | Cod sursa (job #1979465)
#include <iostream>
#include<fstream>
using namespace std;
ifstream in("heapuri.in");
ofstream out("heapuri.out");
const int NN=200001;
int nh=0,N,poz[NN],h[NN],v[NN];
void schimba(int p,int q)
{
int aux=h[p];
h[p]=h[q];
h[q]=aux;
poz[h[p]]=p;
poz[h[q]]=q;
}
void urca(int p)
{
if(p>1 && v[h[p]]<v[h[p/2]])
{
schimba (p,p/2);
urca (p/2);
}
}
void adauga(int x)
{
h[++nh]=x;
poz[x]=nh;
urca(nh);
}
void coboara(int p)
{
int fs=2*p,fd=2*p+1,bun=p;
if(fs<=nh && v[h[fs]]<v[h[bun]])
bun=fs;
if(fd<=nh && v[h[fd]]<v[h[bun]])
bun=fd;
if(p!=bun)
{
schimba (p,bun);
coboara(bun);
}
}
void sterge(int p)
{
schimba(p,nh--);
urca(p);
coboara(p);
}
void scrie()
{
for (int i = 1; i <= nh; i++)
{
out << v[h[i]] << " ";
}
out << "\n";
}
int main()
{
int tip,i,x,p,nrad;
in>>N;
nrad=0;
for(i=0; i<N; i++)
{
in>>tip;
if(tip==1)
{
in>>v[++nrad];
adauga(nrad);
}
if(tip==2)
{
in>>p;
sterge(poz[p]);
}
if(tip==3)
{
out<<v[h[1]]<<"\n";
}
//scrie();
}
return 0;
}