Pagini recente » Cod sursa (job #1710803) | Cod sursa (job #195092) | Cod sursa (job #2783096) | Cod sursa (job #2711877) | Cod sursa (job #1510452)
using namespace std;
#include <fstream>
#define Maxn 200010
FILE *f=fopen ("heapuri.in", "r");
FILE *g=fopen ("heapuri.out", "w");
int N,L,NR;
int A[Maxn],Heap[Maxn],Pos[Maxn];
void push(int x)
{
int aux;
while(x/2 && A[Heap[x]]<A[Heap[x/2]])
{
aux=Heap[x];
Heap[x]=Heap[x/2];
Heap[x/2]=aux;
Pos[Heap[x]]=x;
Pos[Heap[x/2]]=x/2;
x/=2;
}
}
void pop(int x)
{
int aux,y=0;
while(x!=y)
{
y=x;
if(y*2<=L && A[Heap[x]]>A[Heap[y*2]]) x=y*2;
if(y*2+1<=L && A[Heap[x]]>A[Heap[y*2+1]]) x=y*2+1;
aux=Heap[x];
Heap[x]=Heap[y];
Heap[y]=aux;
Pos[Heap[x]]=x;
Pos[Heap[y]]=y;
}
}
int main()
{
int i,x,cod;
fscanf(f,"%d",&N);
for(i=1; i<=N; i++)
{
fscanf(f,"%d",&cod);
if(cod==1)
{
fscanf(f,"%d",&x);
L++;
NR++;
A[NR]=x;
Heap[L]=NR;
Pos[NR]=L;
push(L);
}
else if(cod==2)
{
fscanf(f,"%d",&x);
A[x]=-1;
push(Pos[x]);
Pos[Heap[1]]=0;
Heap[1]=Heap[L--];
Pos[Heap[1]]=1;
if(L>1)pop(1);
}
else fprintf(g,"%d\n",A[Heap[1]]);
}
}