Pagini recente » Cod sursa (job #3238429) | Cod sursa (job #3124496) | Cod sursa (job #2853475) | Cod sursa (job #2182090) | Cod sursa (job #1069887)
#include <iostream>
#include <fstream>
using namespace std;
#define MAX 2000000000
ifstream f("heapuri.in");
ofstream g("heapuri.out");
struct ab
{
int val,ord;
} heap[400005];
int d[400005],n,i,nr,io,inr,dio,nheap,k1;
void heapswap(int p1,int p2)
{
int o1,o2;
o1=heap[p1].ord;
o2=heap[p2].ord;
int iax;
iax=d[o1];
d[o1]=d[o2];
d[o2]=iax;
ab ax;
ax=heap[p1];
heap[p1]=heap[p2];
heap[p2]=ax;
}
void heapup(int o)
{
if (o==1)
return;
if (heap[o].val<heap[o/2].val)
{
heapswap(o,o/2);
heapup(o/2);
}
}
void heapdown(int o)
{
int om;
if (heap[o*2].val<heap[o*2+1].val)
om=o*2;
else
om=o*2+1;
if (heap[o].val>heap[om].val)
{
heapswap(o,om);
heapdown(om);
}
}
int main(void)
{
f>>n;
for (i=1;i<=400004;i++)
heap[i].val=MAX;
for (i=1;i<=n;i++)
{
f>>nr;
if (nr==3)
g<<heap[1].val<<'\n';
if (nr==2)
{
f>>io;
dio=d[io];
heapswap(dio,nheap);
heap[nheap].val=MAX;
heap[nheap].ord=0;
nheap--;
heapup(dio);
heapdown(dio);
}
if (nr==1)
{
k1++;
f>>inr;
nheap++;
d[k1]=nheap;
heap[nheap].val=inr;
heap[nheap].ord=k1;
heapup(nheap);
}
}
}