Pagini recente » Cod sursa (job #2694040) | Cod sursa (job #1843153) | Cod sursa (job #2136503) | Cod sursa (job #509827) | Cod sursa (job #1577165)
#include <fstream>
using namespace std;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
struct elem{int val; int cron;};
elem H[200001];
int n, crt, Poz[200001], ord;
void insereaza(int x)
{
crt++;
int fiu=crt, tata=fiu/2;
while (tata)
{
if (H[tata].val>x)
{
H[fiu]=H[tata];
Poz[H[tata].cron]=fiu;
fiu=tata;
tata=tata/2;
}
else
{
break;
}
}
H[fiu].val=x;
H[fiu].cron=ord;
Poz[H[fiu].cron]=fiu;
}
void combinare(int i)
{
int inf=H[i].val, t=H[i].cron, tata=i, fiu=2*i;
while (fiu<=crt)
{
if (fiu+1<=crt && H[fiu].val>H[fiu+1].val) fiu++;
if (H[fiu].val<=inf)
{
H[tata]=H[fiu];
Poz[H[fiu].cron]=tata;
tata=fiu;
fiu=2*tata;
}
else
{
break;
}
}
H[tata].val=inf;
H[tata].cron=t;
Poz[H[tata].cron]=tata;
}
void eliminare(int x)
{
H[x]=H[crt];
crt--;
combinare(x);
}
int main()
{
int i, c, x, j;
fin>>n;
for (i=1; i<=n; i++)
{
fin>>c;
if (c==1)
{
fin>>x;
ord++;
insereaza(x);
}
if (c==2)
{
fin>>x;
eliminare(Poz[x]);
}
if (c==3)
fout<<H[1].val<<'\n';
}
return 0;
}