Pagini recente » Cod sursa (job #2893339) | Cod sursa (job #1067666) | Cod sursa (job #559345) | Cod sursa (job #3246583) | Cod sursa (job #2552233)
#include <bits/stdc++.h>
#include <cstdio>
using namespace std;
FILE* fin=fopen("heapuri.in", "r");
FILE* fout=fopen("heapuri.out", "w");
int v[200002], n, nr, p[200002], k, ha[200001];
void Urcare(int nod)
{
int auxv=v[nod], auxp=p[nod];
while (v[nod/2]>auxv && nod/2>=1)
{
/*
ha[p[nod]]^=ha[p[nod/2]];
ha[p[nod/2]]^=ha[p[nod]];
ha[p[nod]]^=ha[p[nod/2]];*/
//swap(ha[p[nod]], ha[p[nod/2]]);
//ha[p[nod]]=ha[p[nod/2]];
v[nod]=v[nod/2];
p[nod]=p[nod/2];
ha[p[nod]]=nod;
nod/=2;
}
v[nod]=auxv;
p[nod]=auxp;
ha[p[nod]]=nod;
}
void Coborare(int nod)
{
int auxv=v[nod], auxp=p[nod];
while (min(v[nod*2], v[nod*2+1])<auxv && nod*2<=nr)
{
if (nod*2<nr)
{
int son=v[nod*2]<=v[nod*2+1]?nod*2:nod*2+1;
/*ha[p[nod]]^=ha[p[son]];
ha[p[son]]^=ha[p[nod]];
ha[p[nod]]^=ha[p[son]];*/
//swap(ha[p[nod]], ha[p[son]]);
ha[p[nod]]=ha[p[son]];
v[nod]=v[son];
p[nod]=p[son];
ha[p[nod]]=nod;
nod=son;
}
else
{
if (v[nod*2]<auxv)
{
/*ha[p[nod]]^=ha[p[nod*2]];
ha[p[nod*2]]^=ha[p[nod]];
ha[p[nod]]^=ha[p[nod*2]];*/
//swap(ha[p[nod]], ha[p[nod*2]]);
//ha[p[nod]]^=ha[p[nod*2]];
v[nod]=v[nod*2];
p[nod]=p[nod*2];
ha[p[nod]]=nod;
nod*=2;
}
else
break;
}
}
v[nod]=auxv;
p[nod]=auxp;
ha[p[nod]]=nod;
}
void Delet(int nod)
{
v[nod]=v[nr];
nr--;
if (v[nod]<v[nod/2])
Urcare(nod);
else
Coborare(nod);
}
void Enter(int val)
{
nr++;
k++;
v[nr]=val;
p[nr]=k;
ha[k]=nr;
Urcare(nr);
}
int main()
{
fscanf(fin, "%d", &n);
for (int i=1; i<=n; i++)
{
int x, a;
fscanf(fin, "%d", &x);
if (x==1)
{
fscanf(fin, "%d", &a);
Enter(a);
}
else if (x==2)
{
fscanf(fin, "%d", &a);
Delet(ha[a]);
}
else
{
fprintf(fout, "%d\n", v[1]);
}
}
fclose(fin);
return 0;
}