Pagini recente » Cod sursa (job #2937498) | Cod sursa (job #1570182) | Cod sursa (job #897604) | Cod sursa (job #1831890) | Cod sursa (job #2768685)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
int n,q,a,v[200001],nr,afis[200001];
void downs (int poz)
{
if (poz*2<=nr)
{
int swapp,inloc;
if (v[poz]>v[poz*2] || v[poz]>v[poz*2+1])
{
if (v[poz*2]>v[poz*2+1])
{
swapp=poz*2+1;
}
else swapp=poz*2;
inloc=v[swapp];
v[swapp]=v[poz];
v[poz]=inloc;
if (swapp<nr)
downs(swapp);
}
}
}
void ups (int poz)
{
if (v[poz]<v[poz/2])
{
int inloc;
inloc=v[poz];
afis[v[poz]]=poz/2;
afis[v[poz/2]]=poz;
v[poz]=v[poz/2];
v[poz/2]=inloc;
if (poz/2>0)
ups(poz/2);
}
}
void elim (int poz,int &nr)
{
int ok=0,save;
for (int i=1; i<nr && ok==0; i++)
{
if (v[i]==poz)
{
ok=1;
v[i]=v[nr];
save=i;
}
}
if (v[nr]==poz && ok==0)
{
v[nr]=0;
}
//v[poz]=v[nr];
nr--;
if (save>1 && (v[save]>v[save/2]))
{
ups(save);
}
else
{
downs(save);
}
}
int main()
{
f>>n;
for (int i=1; i<=n; i++)
{
f>>q;
if (q==1)
{
f>>a;
nr++;
v[nr]=a;
afis[nr]=a;
ups(nr);
}
else if (q==2)
{
f>>a;
elim(afis[a],nr);
}
else
{
g<<v[1]<<'\n';
}
}
/*cout<<'\n';
for (int i=1; i<=nr; i++)
cout<<v[i]<<' ';*/
return 0;
}