Pagini recente » Cod sursa (job #3252016) | Cod sursa (job #1555413) | Cod sursa (job #1643650) | Cod sursa (job #510892) | Cod sursa (job #2618727)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("heapuri.in");
ofstream fout ("heapuri.out");
int heap[200001], n, f[200001];
void Up (int x)
{
int tata = x / 2;
if (tata && heap[x] < heap[tata])
swap (heap[x], heap[tata]), Up (tata);
}
void add (int val)
{
n ++;
heap[n] = val;
Up(n);
}
void Down (int x)
{
int fiu = 2 * x;
if (fiu < n && heap[fiu + 1] < heap[fiu])
fiu ++;
if (fiu <= n && heap[x] > heap[fiu])
swap (heap[x], heap[fiu]), Down(fiu);
}
void pop (int val)
{
int x = 1;
while (heap[x] != val)
x ++;
heap[x] = heap[n];
n --;
Down (x);
Up (x);
}
int main ()
{
int m, i, val, nr = 0, op;
fin >> m;
for (i = 1; i <= m; i ++)
{
fin >> op;
if (op == 1)
{
fin >> val;
f[++ nr] = val;
add (val);
}
if (op == 2)
{
fin >> val;
pop (f[val]);
}
if (op == 3)
fout << heap[1] << "\n";
}
}