Pagini recente » Cod sursa (job #1755342) | Cod sursa (job #117516) | Cod sursa (job #2111056) | Cod sursa (job #1752849) | Cod sursa (job #1869987)
#include <bits/stdc++.h>
using namespace std;
int poz[200005], val[200005], init[200005];
int n, i, x, op, m, p;
void Push(int x)
{ int k, tata;
val[++n] = x; k = n;
poz[x]=n;
while(k > 1)
{
tata = k/2;
if(val[k] >= val[tata])
return;
swap(val[k],val[tata]);
swap(poz[val[k]],poz[val[tata]]);
k = tata;
}
}
void Pop(int k)
{ int fiu;
val[k] = val[n];
poz[val[n]] = k;
n--;
while(2*k <= n)
{
fiu = 2*k;
if(fiu+1 <= n && val[fiu] > val[fiu+1])
fiu++;
if(val[k] <= val[fiu]) return;
swap(val[k],val[fiu]);
swap(poz[val[k]],poz[val[fiu]]);
k = fiu;
}
}
int main()
{ int k = 0;
ifstream fin("heapuri.in");
ofstream fout("heapuri.out");
fin >> m;
for(i = 1; i <= m; i++)
{ fin >> op;
if(op == 1)
{
fin >> x;
k++;
init[k] = x;
Push(x);
}
else if(op == 2)
{ fin >> x;
x = init[x];
x = poz[x];
Pop(x);
}
else
fout << val[1] <<"\n";
}
return 0;
}