Pagini recente » Cod sursa (job #692719) | Cod sursa (job #2684780) | Cod sursa (job #4311) | Cod sursa (job #1072085) | Cod sursa (job #1805874)
#include <fstream>
#define N 200005
using namespace std;
ifstream in("heapuri.in");
ofstream out("heapuri.out");
struct heap
{
int val, ind;
};
heap h[N];
int poz[N];
int n, k;
void up (int p)
{
if(p > 1 && h[p].val < h[p/2].val)
{
swap(h[p], h[p/2]);
swap(poz[h[p].ind], poz[h[p/2].ind]);
up(p/2);
}
}
void down(int p)
{
if(2*p <= k)
{
int x = p;
if(h[2*p].val < h[x].val)
x = 2*p;
if(2*p + 1 <= k && h[2*p + 1].val < h[x].val)
x = 2*p + 1;
if(x != p)
{
swap(h[p], h[x]);
swap(poz[h[p].ind], poz[h[x].ind]);
down(x);
}
}
}
int main()
{
in >> n;
int i, cod, x, cnt = 0;
for(i = 1; i <= n; i++)
{
in >> cod;
if(cod == 3)
out << h[1].val << "\n";
else
{
in >> x;
if(cod == 1)
{
cnt++;
k++;
h[k].val = x;
h[k].ind = cnt;
poz[cnt] = k;
up(k);
}
else
{
int w = poz[x];
h[w] = h[k];
poz[h[k].ind] = w;
k--;
up(w);
down(w);
}
}
}
}