Pagini recente » blat5 | Profil Mijay | Profil eddy13579 | Cod sursa (job #2044897) | Cod sursa (job #1365514)
#include <fstream>
#include <utility>
#define MX 200001
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
int n,a[MX];
int total;
int nrint, intrat[MX], poz[MX];
void inserare(int x)
{
a[++total] = x;
nrint++;
poz[x] = total;
intrat[nrint] = x;
int tata,act;
act = total;
tata = act/2;
while(a[tata]>a[act] && tata)
{
poz[a[tata]] = act;
poz[a[act]] = tata;
swap(a[tata], a[act]);
act = tata;
tata = act/2;
}
a[act] = x;
}
void sterge(int x)
{
int indice=poz[intrat[x]];
poz[a[total]] = poz[intrat[x]];
poz[intrat[x]] = total;
swap(a[indice], a[total]);
total--;
int act=indice,fiu;
if(act/2 && a[act/2]>a[act])
{
while(a[act/2] > a[act] && act/2)
{
poz[a[act/2]] = poz[a[act]];
poz[a[act]] /= 2;
swap(a[act/2], a[act]);
act /= 2;
}
}
else
while(act*2 <= total)
{
fiu = 0;
if(a[act*2]<a[act])
{
fiu = act*2;
}
if(act*2+1<=total && a[act*2+1]<a[fiu])
{
fiu = act*2+1;
}
if(!fiu) break;
poz[a[act]] = poz[a[fiu]];
poz[a[fiu]] /= 2;
swap(a[act], a[fiu]);
act = fiu;
}
}
int main()
{
int i,j,x,y;
fin>>n;
for(i=1; i<=n; i++)
{
fin>>x;
if(x == 1)
{
fin>>y;
inserare(y);
}
else
if(x == 2)
{
fin>>y;
sterge(y);
/*for(int j=1; j<=total; j++) fout<<a[j]<<' ';
fout<<'\n';*/
}
else
{
fout<<a[1]<<'\n';
}
}
fin.close(); fout.close();
return 0;
}