Pagini recente » Cod sursa (job #1227317) | Cod sursa (job #1101788) | Cod sursa (job #2388668) | Cod sursa (job #2817158) | Cod sursa (job #1679787)
#include <fstream>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
struct el
{
int val,nr;
}a[200005];
int crt,b[200005],k,n,i,p,x,t;
void adauga(int nod)
{
if(nod>0&&a[nod].val>a[crt].val)
{
int tmp=a[nod].val;
a[nod].val=a[crt].val;
a[crt].val=tmp;
tmp=a[nod].nr;
a[nod].nr=a[crt].nr;
a[crt].nr=tmp;
tmp=b[a[crt].nr];
b[a[crt].nr]=b[a[nod].nr];
b[a[nod].nr]=tmp;
crt=nod;
adauga(nod/2);
}
}
void sorteaza(int nod)
{
if(nod/2>0&&a[nod/2].val>a[nod].val)
{
el tmp=a[nod];
a[nod]=a[nod/2];
a[nod/2]=tmp;
tmp.val=b[a[nod].nr];
b[a[nod].nr]=b[a[nod/2].nr];
b[a[nod/2].nr]=tmp.val;
sorteaza(nod/2);
}
else
if(2*nod<=k)
{
if(2*nod+1>k)
{
if(a[2*nod].val<a[nod].val)
{
el tmp=a[nod];
a[nod]=a[2*nod];
a[2*nod]=tmp;
tmp.val=b[a[nod].nr];
b[a[nod].nr]=b[a[2*nod].nr];
b[a[2*nod].nr]=tmp.val;
sorteaza(2*nod);
}
}
else
{
int s;
if(a[2*nod].val>a[2*nod+1].val)
s=2*nod+1;
else
s=2*nod;
if(a[s].val<a[nod].val)
{
el tmp=a[nod];
a[nod]=a[s];
a[s]=tmp;
tmp.val=b[a[nod].nr];
b[a[nod].nr]=b[a[s].nr];
b[a[s].nr]=tmp.val;
sorteaza(s);
}
}
}
}
void sterge(int poz)
{
a[b[poz]]=a[k];
k--;
b[a[b[poz]].nr]=b[poz];
sorteaza(b[poz]);
}
int main()
{
fin>>n;
for(i=1;i<=n;i++)
{
fin>>p;
if(p==1)
{
fin>>x;
a[++k].val=x;
a[k].nr=++t;
b[t]=k;
crt=k;
adauga(k/2);
}
else
if(p==2)
{
fin>>x;
sterge(x);
}
else
fout<<a[1].val<<"\n";
}
return 0;
}