Pagini recente » Cod sursa (job #2068941) | Cod sursa (job #1251490) | Cod sursa (job #953437) | Cod sursa (job #690414) | Cod sursa (job #2270612)
#include <fstream>
#define INF 1000000006
using namespace std;
ifstream f ("heapuri.in");
ofstream g ("heapuri.out");
int q, tip, val, n, k, aux;
int H[200005];
int v[200005];
bool used[200005];
void HeapUp (int x)
{
if (x > 1)
{
if (v[H[x]] < v[H[x / 2]])
{
swap(H[x], H[x / 2]);
HeapUp(x / 2);
}
}
}
void HeapDown (int x, int aux)
{
int st, dr;
if (2 * x <= aux)
{
st = v[H[2 * x]];
if (2 * x + 1 <= aux)
dr = v[H[2 * x + 1]];
else dr = st + 1;
if (min(st, dr) < v[H[x]])
{
if (st < dr)
{
swap(H[x], H[2*x]);
HeapDown(2 * x, aux);
}
else
{
swap(H[x], H[2 * x + 1]);
HeapDown(2 * x + 1, aux);
}
}
}
}
int main()
{
f >> q;
for (; q; q--)
{
f >> tip;
if (tip == 1)
{
f >> val;
n++;
aux++;
v[n] = val;
H[aux] = n;
HeapUp(aux);
}
else if (tip == 2)
{
f >> val;
used[val] = true;
}
else
{
while (used[H[1]] == true)
{
swap(H[1], H[aux]);
aux--;
HeapDown(1, aux);
}
g << v[H[1]] << '\n';
}
}
return 0;
}