Pagini recente » Cod sursa (job #177724) | Cod sursa (job #1650229) | Cod sursa (job #2753863) | Cod sursa (job #2875749) | Cod sursa (job #2068234)
#include<fstream>
using namespace std;
int n,l,nr,i,j,x,op,p;
struct heap{int v,p;};
heap H[200002];
ifstream f("heapuri.in");
ofstream g("heapuri.out");
void up(int k,int n)
{
int tata=k/2,fiu=k;
while(tata && H[fiu].v<H[tata].v)
{
swap(H[fiu],H[tata]);
fiu=tata;
tata=tata/2;
}
}
void down(int k,int n)
{
int tata=k,fiu=2*k;
while(fiu<=n)
{
if(fiu<n && H[fiu].v>H[fiu+1].v) fiu++;
if(H[tata].v>H[fiu].v)
{
swap(H[tata],H[fiu]);
tata=fiu;
fiu=2*fiu;
}
else fiu=n+1;
}
}
void elimin(int k,int &n)
{
H[k]=H[n];
n--;
if(k>1 && H[k].v<H[k/2].v) up(k,n);
else down(k,n);
}
int main()
{
f>>n;
nr=0;
l=0;
for(i=1;i<=n;i++)
{
f>>op;
if(op==1 || op==2)
{
f>>x;
}
if(op==1)
{
l++;nr++;
H[l].v=x;
H[l].p=nr;
up(l,l);
}
if(op==2)
{
p=0;
for(j=1;j<=l;j++)
if(H[j].p==x) p=j;
elimin(p,l);
}
if(op==3) g<<H[1].v<<"\n";
}
f.close();
g.close();
return 0;
}