Pagini recente » Cod sursa (job #1627957) | Cod sursa (job #1180421) | Cod sursa (job #1241669) | Cod sursa (job #446175) | Cod sursa (job #563949)
Cod sursa(job #563949)
#include <iostream>
#include <fstream>
using namespace std;
unsigned long n,nr=0;
long T[200000],poz[100000];
ifstream f("heapuri.in");
ofstream g("heapuri.out");
void insert(long);
void combina(long,long);
void citire()
{
int i,a,x;
f>>n;
for(i=1;i<=n;i++)
{
f>>a;
if(a==1)
{
f>>x;
insert(x);
}
if(a==2)
{
f>>x;
T[poz[x]]=T[nr];
combina(poz[x],nr-1);
nr--;
}
if(a==3)
g<<T[1]<<'\n';
}
}
void insert(long x)
{
long fiu=++nr, tata=fiu/2,k,aux;
poz[nr]=nr;
k=nr;
while(tata && x<T[tata])
{
T[fiu]=T[tata];
aux=poz[k];
poz[k]=poz[tata];
poz[tata]=aux;
fiu=tata;
tata=fiu/2;
}
T[fiu]=x;
}
void combina(long i,long n)
{
long tata=i,fiu=2*i,v=T[i];
while(fiu<=nr)
{
if(fiu<nr)
if(T[fiu]>T[fiu+1])
++fiu;
if(v>T[fiu])
{
T[tata]=T[fiu];
tata=fiu;
fiu*=2;
}
else
fiu=nr+1;
}
T[tata]=v;
}
int main()
{
citire();
for(int i=1;i<=nr;i++)
cout<<poz[i]<<' ';
return 0;
}