Pagini recente » Cod sursa (job #2802471) | Cod sursa (job #553405) | Cod sursa (job #2791676) | Cod sursa (job #1793582) | Cod sursa (job #2290116)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("heapuri.in");
ofstream g("heapuri.out");
struct heap
{
int num, poz;
}x[200010];
int a[200010];
void push(int pas)
{
while ( pas > 1 && x[pas / 2].num > x[pas].num)
{
swap(x[pas], x[pas / 2]);
a[x[pas].poz] = pas;
a[x[pas / 2].poz] = pas / 2;
pas /= 2;
}
}
void pop(int pas, int &k)
{
swap(x[pas], x[k]);
a[x[pas].poz] = pas;
k--;
int aux;
while (pas != aux)
{
aux = pas;
if (2 * aux <= k && x[pas].num > x[aux * 2].num)
pas = 2 * aux;
if (2 * aux + 1 <= k && x[pas].num > x[2 * aux + 1].num)
pas = 2 * aux + 1;
swap(x[pas], x[aux]);
a[x[pas].poz] = pas;
a[x[aux].poz] = aux;
}
}
int main()
{
int n, i, j, pas, verf, nr, k = 0, numar = 0;
f >> n;
for (i = 0; i < n; ++i)
{
f >> verf;
if (verf != 3)
{
f >> nr;
if( verf == 1)
{
++k; ++numar;
x[k].num = nr;
x[k].poz = numar;
a[x[k].poz] = k;
pas = k;
push(pas);
}
else
{
pop(a[nr], k);
}
}
else
g << x[1].num << "\n";
}
return 0;
}