Pagini recente » Cod sursa (job #1852655) | Cod sursa (job #2731834) | Cod sursa (job #1290088) | Cod sursa (job #473955) | Cod sursa (job #652642)
Cod sursa(job #652642)
#include <cstdio>
#define mvnrn 200010
using namespace std;
int n, L, m;
int v[mvnrn], hevp[mvnrn], poz[mvnrn];
void push(int nr)
{
int vunr;
while (nr/2 && v[hevp[nr]]<v[hevp[nr/2]])
{
vunr = hevp[nr];
hevp[nr] = hevp[nr/2];
hevp[nr/2] = vunr;
poz[hevp[nr]] = nr;
poz[hevp[nr/2]] = nr/2;
nr /= 2;
}
}
void pop(int nr)
{
int vunr, y = 0;
while (nr != y)
{
y = nr;
if (y*2<=L && v[hevp[nr]]>v[hevp[y*2]]) nr = y*2;
if (y*2+1<=L && v[hevp[nr]]>v[hevp[y*2+1]]) nr = y*2+1;
vunr = hevp[nr];
hevp[nr] = hevp[y];
hevp[y] = vunr;
poz[hevp[nr]] = nr;
poz[hevp[y]] = y;
}
}
int main()
{
freopen("heapuri.in", "r", stdin);
freopen("heapuri.out", "w", stdout);
int i, nr, op;
scanf("%d ", &m);
for (i=1; i<=m; i++)
{
scanf("%d ", &op);
if (op<3) scanf("%d ", &nr);
if (op==1)
{
L++, n++;
v[n] = nr;
hevp[L] = n;
poz[n] = L;
push(L);
}
if (op == 2)
{
v[nr] = -1;
push(poz[nr]);
poz[hevp[1]] = 0;
hevp[1] = hevp[L--];
poz[hevp[1]] = 1;
if (L>1) pop(1);
}
if (op == 3) printf("%d\n", v[hevp[1]]);
}
return 0;}