Pagini recente » Cod sursa (job #491390) | Cod sursa (job #2355761) | Autentificare | Cod sursa (job #1238876) | Cod sursa (job #2065714)
#include<fstream>
using namespace std;
int n,i,j,op,p,k,x,ct;
struct punct{int v,p;};
punct v[200010];
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
void down(int k,int n)
{
int t,f;
t=k;
f=2*k;
while(f<=n)
{
if(f<n && v[f].v<v[f+1].v) f++;
if(v[t].v>v[f].v)
{
swap(v[t],v[f]);
t=f;
f=2*f;
}
else f=n+1;
}
}
void up(int k,int n)
{
int t,f;
f=k;
t=f/2;
while(t && v[t].v>v[f].v)
{
swap(v[t],v[f]);
f=t;
t=f/2;
}
}
void elimin(int pz)
{
v[pz]=v[k];
k--;
if(k>1 && v[pz].v<v[pz/2].v) up(pz,k);
else down(pz,k);
}
int main()
{
fin>>n;
ct=0;
for(i=1;i<=n;i++)
{
fin>>op;
if(op==1 || op==2)
{
fin>>p;
}
if(op==1)
{
k++;
ct++;
v[k].v=p;
v[k].p=ct;
up(k,k);
}
if(op==2)
{
x=0;
for(j=1;j<=k && x==0;j++)
{
if(v[j].p==p) x=j;
}
elimin(x);
}
if(op==3) fout<<v[1].v<<"\n";
}
fin.close();
fout.close();
return 0;
}