Pagini recente » Cod sursa (job #116992) | Cod sursa (job #1395793) | Cod sursa (job #547711) | Cod sursa (job #1057826) | Cod sursa (job #1588104)
#include <iostream>
#include <fstream>
#define maxn 200010
struct punct{int info;int poz;}v[maxn];
using namespace std;
int main()
{int n,x,y,i,j,m,aux,ok,p;
fstream f("heapuri.in",ios::in);
fstream g("heapuri.out",ios::out);
f>>n;m=0;
for(i=1;i<=n;i++)
{ f>>x;
if(x==1)
{m++;
f>>y;
v[m+1].info=1000000003;
v[m].info=y;
v[m].poz=m;
for(j=m/2;j>=1;j--)
if((v[j].info>v[j*2].info)||((v[j].info>v[j*2+1].info)))
{if(v[j*2].info<v[j*2+1].info)
{aux=v[j].poz;
v[j].poz=v[2*j].poz;
v[2*j].poz=aux;
aux=v[j*2].info;
v[j*2].info=v[j].info;
v[j].info=aux;
}
else
{aux=v[j].poz;
v[j].poz=v[2*j+1].poz;
v[2*j+1].poz=aux;
aux=v[j*2+1].info;
v[j*2+1].info=v[j].info;
v[j].info=aux;}
}
}
if(x==2)
{f>>y;ok=0;
for(j=1;((j<=m)&&(ok==0));j++)
if(v[j].poz==y)
{p=j;ok=1;}
v[p].info=v[m].info;
v[p].poz=v[m].poz;
v[m].info=1000000003;
m--;
for(j=m/2;j>=1;j--)
if((v[j].info>v[j*2].info)||((v[j].info>v[j*2+1].info)))
{if(v[j*2].info<v[j*2+1].info)
{aux=v[j].poz;
v[j].poz=v[2*j].poz;
v[2*j].poz=aux;
aux=v[j*2].info;
v[j*2].info=v[j].info;
v[j].info=aux;
}
else
{aux=v[j].poz;
v[j].poz=v[2*j+1].poz;
v[2*j+1].poz=aux;
aux=v[j*2+1].info;
v[j*2+1].info=v[j].info;
v[j].info=aux;}
}
}
if(x==3)
g<<v[1].info<<'\n';
}
f.close();
g.close();
}