Pagini recente » Cod sursa (job #2175793) | Cod sursa (job #438627) | Cod sursa (job #2909591) | Cod sursa (job #2545995) | Cod sursa (job #2222674)
#include <iostream>
using namespace std;
const int max_size = 200005;
int n, nr, op, x, i, heap[max_size], poz[max_size], v[max_size];
void up(int p)
{
if(p / 2 < 1) return;
if(v[heap[p / 2]] > v[heap[p]])
{
swap(heap[p / 2], heap[p]);
swap(poz[heap[p / 2]], poz[heap[p]]);
up(p / 2);
}
}
void down(int p)
{
int fiu = p * 2;
if(fiu > nr) return;
if(fiu < nr && v[heap[fiu + 1]] < v[heap[fiu]]) fiu++;
if(v[heap[p]] > v[heap[fiu]])
{
swap(heap[fiu], heap[p]);
swap(poz[heap[fiu]], poz[heap[p]]);
down(fiu);
}
}
int main()
{
freopen("heapuri.in", "r", stdin);
freopen("heapuri.out", "w", stdout);
scanf("%d", &n);
for(; n; n--)
{
scanf("%d", &op);
if(op == 1)
{
scanf("%d", &v[++i]);
heap[++nr] = i;
poz[i] = nr;
up(nr);
}
else if(op == 2)
{
scanf("%d", &x);
poz[heap[nr]] = poz[x];
heap[poz[x]] = heap[nr];
nr--;
down(poz[x]);
}
else printf("%d\n", v[heap[1]]);
}
return 0;
}