Pagini recente » Cod sursa (job #3179698) | Cod sursa (job #530124) | Cod sursa (job #2644639) | Cod sursa (job #2855657) | Cod sursa (job #2979557)
#include <bits/stdc++.h>
using namespace std;
string np = "heapuri";
ifstream f(np + ".in");
ofstream g(np + ".out");
// #define f cin
// #define g cout
int n, len, nr;
int Heap[200003], val[200003], poz[200003];
void push(int x)
{
int aux;
while (x / 2 and val[Heap[x]] < val[Heap[x / 2]])
{
aux = Heap[x];
Heap[x] = Heap[x / 2];
Heap[x / 2] = aux;
poz[Heap[x]] = x;
poz[Heap[x / 2]] = x / 2;
x /= 2;
}
}
void pop(int x)
{
int aux, y = 0;
while (x != y)
{
y = x;
if (y * 2 <= len and val[Heap[x]] > val[Heap[y * 2]])
x = y * 2;
if (y * 2 + 1 <= len and val[Heap[x]] > val[Heap[y * 2 + 1]])
x = y * 2 + 1;
aux = Heap[x];
Heap[x] = Heap[y];
Heap[y] = aux;
poz[Heap[x]] = x;
poz[Heap[y]] = y;
}
}
int main()
{
f >> n;
for (int i = 1, cod; i <= n; i++)
{
f >> cod;
if (cod == 1)
{
int x;
f >> x;
val[++nr] = x;
Heap[++len] = nr;
poz[nr] = len;
push(len);
}
if (cod == 2)
{
int x;
f >> x;
val[x] = -1;
push(poz[x]);
poz[Heap[1]] = 0;
Heap[1] = Heap[len--];
poz[Heap[1]] = 1;
if (len > 1)
pop(1);
}
if (cod == 3)
g << val[Heap[1]] << '\n';
}
return 0;
}